2

我对使用 MongoDB 还很陌生。

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

  1. 是否可以使用“_id = ObjectId(...)”字段来做到这一点?
  2. 如果不是,我们是否必须显式插入一个具有顺序值的键来识别给定记录的前一条记录?(假设当前集合中没有顺序键/值对)

非常感谢任何帮助。谢谢你。

4

2 回答 2

3

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

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

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

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

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

于 2014-06-02T07:28:29.760 回答
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)
于 2014-06-02T07:36:51.113 回答