【问题标题】:How can I retrieve the most recently added documents in mongodb-mongoose without using sort?如何在不使用排序的情况下检索 mongodb-mongoose 中最近添加的文档?
【发布时间】:2017-03-10 22:59:31
【问题描述】:

我有一个大型 mongodb 集合,其中每个文档代表一个简单的日志消息,该消息以设定的时间间隔(比如 1 分钟)发生。每当我使用 Mongoose 执行Find 时,我都会按照添加顺序获取数据库的全部内容。我正在寻找一个查询,我可以在其中获得最后 10 条添加的记录,而无需对时间戳进行排序。以下是我的文件样本:

[ { _id: 58bd2dcd51d1169260ccbdac,
  contentID: 1,
  clicks: 50,
  views: 61 },
 { _id: 58bd43d40fda0d25b0c6724e,
  'contentID: ': 1,
  clicks: 45,
  views: 72 },
{ _id: 58bd54ae2d67e820143eddda,
  'contentID: ': 1,
  clicks: 25,
  views: 32 }]

【问题讨论】:

  • 您可以按_id:-1排序,但您仍然需要排序。如果您不对 99% 的情况进行排序,您将按自然顺序获得行。但在 1% 中,它们将被随机排序。在这里你可以找到完整的解释stackoverflow.com/questions/11599069/…

标签: node.js mongodb mongoose mongodb-query


【解决方案1】:

很遗憾,我相信您将不得不在查询中使用排序。

example.find()sort.({"_id": -1}).limit(10)

为方便起见,创建一个变量,然后调用该变量

var q = db.example.find()sort.({"_id": -1}).limit(10);
q.exec(function() ...},{})

【讨论】:

  • 如果你想得到最后十个记录,知道它们是潜在的,它们不是最近的,而是数组中的最后十个;使用 $slice 示例 db.posts.find( {}, { comments: { $slice: [ -10, 10 ] } } ) 这将为您提供 cmets 数组的 10 行,从最后一项的第 10 行开始。 docs.mongodb.com/manual/reference/operator/projection/slice
猜你喜欢
  • 2019-07-12
  • 2016-02-23
  • 1970-01-01
  • 2015-05-25
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
  • 2018-08-08
  • 1970-01-01
相关资源
最近更新 更多