给定一个特定记录,检索MongoDB集合中的前一个记录

时间:2014-06-02 07:19:11

标签: mongodb mongodb-query mongodb-scala

我是使用MongoDB的新手。

我需要检索MongoDB集合中给定记录的先前记录。

  1. 是否可以使用“_id = ObjectId(...)”字段执行此操作?
  2. 如果没有,我们是否必须明确插入一个带有顺序值的键来识别给定值的前一个记录? (假设当前集合中没有顺序键/值对)
  3. 非常感谢任何帮助。 谢谢。

2 个答案:

答案 0 :(得分:2)

在所有条件相同的情况下,_id字段的默认值为ObjectId并且是单调的,或者不断增加。

这意味着给定一个已知的ObjectId值,以下内容适用于检索紧接在其之前插入的文档:

db.collection.find(
    { "_id": { "$lt": ObjectId("538c271a19b3a188ca6135eb") }}
).sort({ "_id": -1 }).limit(1)

这是一般情况。唯一可能的差异是各种来源产生ObjectId值,并且它们的时钟设置为不同的时间(如完全不同的UTC时间)。

因此,加上插入率,您可以考虑这对您来说是否足够好,除了罕见和管理不善的情况之外,不应该总是维持订单。

答案 1 :(得分:2)

我建议使用索引以获得最佳性能。

举个例子: 创建索引:

db.books.ensureIndex({book: 1}) // for next records in collection
db.books.ensureIndex({book: -1}) // for previous records in collection

下一个查询如下:

db.books.find({book: {$gt:"a"}}).sort({book: 1}).hint({book: 1}).limit(1)

上一个查询如下:

db.books.find({book: {$lt:"b"}}).sort({book: -1}).hint({book: -1}).limit(1)