鉴于此数据具有唯一的复合索引:
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,检查:“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树索引是双向的,不是吗?