我对使用MongoDB很新 .
我需要检索MongoDB集合中给定记录的先前记录 .
是否可以使用"_id = ObjectId(...)"字段执行此操作?
如果没有,我们是否必须明确插入一个带有顺序值的键来识别给定值的前一个记录? (假设当前集合中没有顺序键/值对)
非常感谢任何帮助 . 谢谢 .
在所有条件相同的情况下, _id 字段的默认值是 ObjectId 并且是单调的,或者不断增加 .
_id
ObjectId
这意味着给定一个已知的 ObjectId 值,以下内容适用于检索紧接在其之前插入的文档:
db.collection.find( { "_id": { "$lt": ObjectId("538c271a19b3a188ca6135eb") }} ).sort({ "_id": -1 }).limit(1)
这是一般情况 . 唯一可能的差异是各种来源产生 ObjectId 值,并且它们的时钟设置为不同的时间(如完全不同的UTC时间) .
因此,再加上插入速率,您可以考虑这对您来说是否足够好,除了罕见和管理不善的情况之外,不应该始终保持订单的情况 .
我建议使用索引以获得最佳性能 .
举个例子: Create Indexes:
db.books.ensureIndex({book: 1}) // for next records in collection db.books.ensureIndex({book: -1}) // for previous records in collection
Next query looks like:
db.books.find({book: {$gt:"a"}}).sort({book: 1}).hint({book: 1}).limit(1)
Previous query looks like:
db.books.find({book: {$lt:"b"}}).sort({book: -1}).hint({book: -1}).limit(1)
2 回答
在所有条件相同的情况下,
_id
字段的默认值是ObjectId
并且是单调的,或者不断增加 .这意味着给定一个已知的
ObjectId
值,以下内容适用于检索紧接在其之前插入的文档:这是一般情况 . 唯一可能的差异是各种来源产生
ObjectId
值,并且它们的时钟设置为不同的时间(如完全不同的UTC时间) .因此,再加上插入速率,您可以考虑这对您来说是否足够好,除了罕见和管理不善的情况之外,不应该始终保持订单的情况 .
我建议使用索引以获得最佳性能 .
举个例子: Create Indexes:
Next query looks like:
Previous query looks like: