私があなたの主張を理解したなら、これは役立つかもしれません:
サンプル用にこれらのドキュメントがあると仮定します
{
field1 : 1,
field2 : 2,
},
{
field1 : 2,
field2 : 3,
},
{
field1 : 1,
field2 : 4,
}
ステップ1: filed1専用のインデックスがあります (インデックスの名前 field1_1 )}:実行:db.test3.find({field1:1}).sort({field2:1})
モンゴはfield1_1を使用します ドキュメントを検索するためのインデックス。 .explain()の結果は次のとおりです。
"cursor" : "BtreeCursor field1_1",
"isMultiKey" : false,
"n" : 2,
"nscannedObjects" : 2,
"nscanned" : 2,
ステップ2:複合インデックスを追加し、 field1_1_field2_1という名前を付けます 、これでフィールド1のインデックスが2つになりました。
find().sort()
を実行します クエリ、あなたは
"cursor" : "BtreeCursor field1_1_field2_1",
"isMultiKey" : false,
"n" : 2,
"nscannedObjects" : 2,
"nscanned" : 2,
結論:
db.test3.find({field1:1}).sort({field2:1})
を使用する場合 、mongoはfield1_1_field2_1
を使用します インデックス。
db.test3.find({field1:1})
を使用する場合 、mongoはfield1_1
を使用します インデックス。
私はあなたの場合、あなたがちょうど field1_1_field2_1を持っているなら インデックスを作成し、db.test3.find({field1:1})
を実行しています 、mongoはfield1_1_field2_1
を使用します インデックスも。