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