私はMongoDBの初心者です。 バージョン3.2を使用しています。 MongoDBはクエリで1つのインデックスしか使用できない箇所がいくつかありますが、私が見つけた情報は少し古いと思われます。公式ドキュメントでは何も見つかりませんでした。MongoDB:複数の単一のインデックスまたは複合インデックスを使用する
私はこのフォームで500M製品〜のコレクションを持っている:私はカテゴリごとにすべての製品を見つけ、そして価格で、その後、格付けによってそれをソートする必要
{_id: ObjectId('574d92332a2b10d7618b4575'), title: A, category_id: ObjectId('574d92332a2b10d7618b4575'), price: 30.23, rating:5 },
{_id: ObjectId('574d92332a2b10d7618b4575'), title: B, category_id: ObjectId('574d92332a2b10d7618b4575'), price: 20.23, rating:3 },
{_id: ObjectId('574d92332a2b10d7618b4575'), title: C, category_id: ObjectId('574d92332a2b10d7618b4575'), price: 10.23, rating:4 }
が、最終的なユーザーも望んですることができますそれを価格で直接並べ替えるだけです。
すべての単一のクエリにはcategory_idが渡される必要がありますが、それは大変です。
私は3つのインデックス:{category_id:1}
,{rating:1}
および{price:1}
を作成しました。
これらのクエリは高速です:カテゴリごと
最も高価な製品カテゴリごと db.products.find({category_id:ObjectId('574d92332a2b10d7618b4575')}).sort({price:-1})
ベスト製品カテゴリごと db.products.find({category_id:ObjectId('574d92332a2b10d7618b4575')}).sort({rating:-1})
最悪の製品 db.products.find({category_id:ObjectId('574d92332a2b10d7618b4575')}).sort({rating:1})
しかし、カテゴリごとにこのクエリが非常に遅いです
ベストの製品は、最も安い db.products.find({category_id:ObjectId('574d92332a2b10d7618b4575')}).sort({rating:-1, price:1})
あなたはどのインデックスが作成した、そしてなぜだろう、私だったら? 私はprice
とrating
だけを持つことはすべてのクエリがcategory_id
を必要とするので、愚かであると考え始めているので、私のインデックスにはcategory_id
が含まれていなければならないが、what confuses me is the last paragraph of the official doc about compound indexesが含まれている必要があります。
私はすでにread this whole section on the official page of MongoDBですが、私の特定の問題に対する答えは見つかりません。
大変助かりました。ありがとう – mattspain