mongodb限制操作检索最新的文档

时间:2014-06-27 04:42:15

标签: mongodb

mongodb按照" _id"的升序查找返回文档,当在find()上应用limit(n)时,它总是返回最旧的n个文档(假设doc1' s _id> doc2&#39 ; s _id暗示doc1比doc2更新,例如,ObjectId)。我想让它返回最新的文档,所以我这样做:

col.find().sort({"_id":-1}).limit(n)

这效率低吗? mongodb会对' col'

中的所有文档进行排序

1 个答案:

答案 0 :(得分:0)

_id字段本质上是"主键"因此有一个索引,所以实际上没有"排序"在整个集合中,它只是以相反的顺序遍历该主索引。

如果您足够高兴,这确实反映了您最近的"文件,在正常情况下没有理由不相信,那么这将以有效的方式返回你想要的东西。

如果您确实希望按其他内容(例如时间戳或其他字段)进行排序,则只需在该字段上创建索引并按上述方式排序。一般情况也应该使用该索引,然后以"降序返回"或者在排序方向或默认索引中指定

db.collection.ensureIndex({ "created": 1 })

或默认"降序" :

db.collection.ensureIndex({ "created": -1 })

然后查询:

db.collection.find().sort({ "created": -1 })

所以基本上它没有"排序"当索引存在时使用的整个集合。 _id密钥始终被编入索引。

另见文档中的.ensureIndex()