如何从复合索引中获取以前的mongoDB文档

时间:2013-04-30 17:09:46

标签: mongodb

给定具有唯一复合指数的数据:

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树索引是双向的,不是吗?

1 个答案:

答案 0 :(得分:0)

答案是:在当前版本中无法完成。第二张jira票是可能的未来修复。

请参阅:SERVER-9540

SERVER-9547

解决方法:使用我概述的反向索引或通过“使用前一个/下一个文档的主键的引用字段创建(双重)链接列表。”