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'
中的所有文档进行排序答案 0 :(得分:0)
_id
字段本质上是"主键"因此有一个索引,所以实际上没有"排序"在整个集合中,它只是以相反的顺序遍历该主索引。
如果您足够高兴,这确实反映了您最近的"文件,在正常情况下没有理由不相信,那么这将以有效的方式返回你想要的东西。
如果您确实希望按其他内容(例如时间戳或其他字段)进行排序,则只需在该字段上创建索引并按上述方式排序。一般情况也应该使用该索引,然后以"降序返回"或者在排序方向或默认索引中指定
db.collection.ensureIndex({ "created": 1 })
或默认"降序" :
db.collection.ensureIndex({ "created": -1 })
然后查询:
db.collection.find().sort({ "created": -1 })
所以基本上它没有"排序"当索引存在时使用的整个集合。 _id
密钥始终被编入索引。
另见文档中的.ensureIndex()
。