在MongoDb中查找下一个文档

时间:2012-08-17 19:47:07

标签: php mongodb

如果这是我的收藏结构:

{   "_id": ObjectId("4fdbaf608b446b0477000142"),
    "name": "product 1",
},
{   "_id": ObjectId("fghfghfgjhjghkgk"),
    "name": "product 2",
},
{   "_id": ObjectId("fghfghfgjhjghkgk"),
    "name": "product 3",
}

我查询产品1,有没有办法查询下一个文件,在这种情况下会是产品2?

2 个答案:

答案 0 :(得分:13)

如果您想要可预测的结果顺序,最好添加明确的sort()条件。

假设您所遵循的订单是“插入订单”并且您使用的是MongoDB的默认生成的ObjectIds,那么您可以根据ObjectId进行查询:

// Find next product created
db.products.find({_id: {$gt: ObjectId("4fdbaf608b446b0477000142") }}).limit(1)

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

  • ObjectId的前四个字节是从unix样式的时间戳计算出来的(参见:ObjectId Specification
  • _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

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