【问题标题】:mongodb limit operation retrieve newest docsmongodb 限制操作检索最新文档
【发布时间】:2014-06-27 04:42:14
【问题描述】:

mongodb find return docs按“_id”的升序,当在find()上应用limit(n)时,总是返回最旧的n个文档(假设doc1的_id>doc2的_id意味着doc1比doc2更新,例如,ObjectId )。我想让它返回最新的 n 个文档,所以我这样做:

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

这是低效的吗? mongodb会对'col'中的所有文档进行排序吗?

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    _id 字段本质上是“主键”,因此有一个索引,因此整个集合实际上没有“排序”,在这种情况下它只是以相反的顺序遍历该主索引。

    只要您足够高兴,这确实反映了您的“最新”文件,并且在正常情况下没有理由不相信,那么这将以有效的方式返回您想要的。

    如果您确实想按时间戳或其他字段等其他内容进行排序,那么只需在该字段上创建一个索引并按照上面的方式进行排序。一般情况下也应使用该索引,并以“降序”或按您的排序方向或默认索引指定的方式返回

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

    或者作为默认的“降序”:

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

    然后查询:

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

    因此,当存在要使用的索引时,它基本上不会“排序”整个集合。 _id 键始终被索引。

    另请参阅文档中的.ensureIndex()。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-26
      • 2012-12-07
      • 1970-01-01
      • 1970-01-01
      • 2018-09-11
      • 2015-05-25
      • 1970-01-01
      相关资源
      最近更新 更多