0
私は現在、自分自身の電子商取引ソリューションを開発中です。PHPとMongoDBのクエリ - ドキュメント間の共通の値のリストを取得
まず、そのような製品のドキュメントを見て -
{
"_id" : ObjectId("...."),
"sku" : "",
"manufacturer" : "", // Manufacturer
"quantity" : 0,
"price" : 0,
"currency" : "", // Currency code
"warranty" : "", // Yes/No/True/False
"installation" : "", // Installiton type/required
"images" : [], // array of img paths
"creation" : ISODate("...."),
"lastModified" : ISODate("...."),
"details" : [], // array of object each for different language
"properties" : [
{
"property" : "", // property name, unique
"value" : "" // propery value
}
],
"customize" : [
{
"property" : "", // property name
"type" : "", // input type: radio, select, etc.
"options" : [
{
"id" : 1, // numeric id
"option" : "", // option text
"cost" : 0.0 // option additional price
}
]
}
],
"categories" : [], // array of objects {category:1, subs[2,3,4]}
"excludes" : [],
"shipping" : [], // array of objects {location:FR, price:5, additional: 1}
}
だから、私は何をできるようにしたいことは、フィルタ(5の最大、最も一般的な)のリストを取得することです。私が必要
フィルタ:
- 簡単なフィルタ - array_of_obj.x +数で利用可能なすべての値(例:properties.property) - メーカー+各
- ネストされたフィルタのカウントに利用可能なすべての値
- さらに、customize配列とcategories配列のためにネストされていますが、単なるボーナスになります。
どのようにすればよいですか?それは重すぎるでしょうか?
クエリが複雑すぎる場合は、すべての製品を製品の配列に取得する方がよいでしょう(私はPHPを直接データのシリアル化を解除するためにsetTypeMapを使用しています)。次にarray_column、 foreachなど?
「ファセットカウント」を意味すると思います。そして、その別個の価値のための "メーカーの別個のリスト"と "カウント"のようなもの。それは一般的に小さな結果セットを持つ「たくさんのクエリ」として表されます。そのため、いわゆる「ファセット」があり、そのために「 '$ facet'(https://docs.mongodb.com/manual/reference/operator/aggregation/facet/)集約パイプラインステージが存在します。あなたの質問はより明確になるかもしれませんが、それはあなたが探し始めるべきだったのです。 –
[MongoDBクエリの最適化](https://stackoverflow.com/a/27883584/2313887)を見てみてください。これは実際にはすべて「ファセット」に関するもので、「パラレルパイプライン演算子」が存在していたずっと前です。そのようなものとして、ファセットカウントの収集を「最適化」し、そのような「タグ」によるドキュメント選択の助けとなるいくつかの技術がある。トリビアとして、私の最初のMongoDBの使い方は電子商取引でもありました。私はあなたが元々同じミスをしているのを見ることができます。間違いなく "配列内の入れ子になった配列"について再考する必要がありますが、これは本当に悪い考えです。 –
あなたの助けをありがとう@NeilLunnは別の構造を提供できますか?あなたの問題を回避する方法を教えてください。 – Bitmap