在MongoDb中查找下一个文档

Cla*_*ont 7 php mongodb

如果这是我的收藏结构:

{   "_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)

请注意,此示例仅适用于:

  • ObjectId的前四个字节是从unix样式的时间戳计算出来的(参见:ObjectId Specification)
  • _id单独查询将使用默认_id索引(按id排序)来查找匹配项

所以,这种隐式排序与以下内容相同:

db.products.find({_id: {$gt: ObjectId("4fdbaf608b446b0477000142" )}}).sort({_id:1}).limit(1);
Run Code Online (Sandbox Code Playgroud)

如果您为查询添加了更多条件以限定如何查找"下一个"产品(例如,a category),则查询可能使用不同的索引,并且订单可能与您预期的不同.

您可以使用explain()检查索引使用情况.


InP*_*uit 0

您可以使用 ObjectId 按插入顺序取回项目。请参阅:http ://www.mongodb.org/display/DOCS/Optimizing+Object+IDs#OptimizingObjectIDs

如果您想以其他顺序取回它们,则必须定义该顺序并在文档中存储更多信息。