如果这是我的收藏结构:
{ "_id": ObjectId("4fdbaf608b446b0477000142"),
"name": "product 1",
},
{ "_id": ObjectId("fghfghfgjhjghkgk"),
"name": "product 2",
},
{ "_id": ObjectId("fghfghfgjhjghkgk"),
"name": "product 3",
}
我查询产品1,有没有办法查询下一个文件,在这种情况下会是产品2?
答案 0 :(得分:13)
如果您想要可预测的结果顺序,最好添加明确的sort()
条件。
假设您所遵循的订单是“插入订单”并且您使用的是MongoDB的默认生成的ObjectIds,那么您可以根据ObjectId进行查询:
// Find next product created
db.products.find({_id: {$gt: ObjectId("4fdbaf608b446b0477000142") }}).limit(1)
请注意,此示例仅适用于:
_id
上的查询将使用默认的_id
索引(按ID排序)来查找匹配项实际上,这种隐式排序与:
相同db.products.find({_id: {$gt: ObjectId("4fdbaf608b446b0477000142" )}}).sort({_id:1}).limit(1);
如果您向查询添加了更多条件以限定如何查找“下一个”产品(例如,category
),则查询可能会使用不同的索引,并且订单可能与您预期的不同。
您可以使用explain()检查索引使用情况。
答案 1 :(得分:0)
您可以使用ObjectId以插入顺序返回项目。请参阅:http://www.mongodb.org/display/DOCS/Optimizing+Object+IDs#OptimizingObjectIDs
如果您想以其他顺序取回它们,则必须定义该订单的内容并在文档中存储更多信息。