一意の複合インデックスを持つこのデータが与えられた場合:
db.employees.drop()
db.employees.insert( { employeenum : 1, check : "A" } )
db.employees.insert( { employeenum : 1, check : "B" } )
db.employees.insert( { employeenum : 2, check : "A" } )
db.employees.insert( { employeenum : 2, check : "B" } )
db.employees.insert( { employeenum : 2, check : "C" } )
db.employees.insert( { employeenum : 5, check : "E" } )
db.employees.insert( { employeenum : 6, check : "A" } )
db.employees.ensureIndex( { employeenum: 1, check : 1 }, {unique: true} )
の後にインデックス内の次のドキュメントが必要な場合{ employeenum : 5, check : "E" }
。私がすることができます:
db.employees.find({ query: { $or: [ { employeenum: { $gt: 5 } }, { check: { $gt: "E" } } ] }, $min: { employeenum: 5, check: "E" }, $maxScan: 2 })
{ employeenum : 6, check : "A" } を返します。
しかし、 から逆方向にトラバースするにはどうすればよい{ employeenum : 5, check : "E" }
でしょうか? フェッチする方法を教えてください{ employeenum : 2, check : "C" }
。私がやっている方法:
{ query: { $or: [ { employeenum: { $lt: 5 } }, { check: { $lt: "E" } } ] }, $hint: { employeenum: -1, check: -1 }, $min: { employeenum: 5, check: "E" }, $maxScan: 2 }
逆索引が必要で、非常に非効率的な解決策です。より良い方法はありますか?B ツリー インデックスは双方向ですよね。