Mongoose查询,选择10个最新文档而不更改订单

时间:2016-05-30 21:31:31

标签: node.js mongodb mongoose

我需要从我的messages collection中选择10条最新消息,然后将它们作为一个数组从旧版本返回到最新版本。

示例m1, m2, m3, ... [m19, m20, m22]< - 选择最后10但保留订单。

slice运算符很棒,因为它可以取值-10,因此从数组中选择10个最后的值。问题是我想要对整个查询响应进行排序,而不是响应中的属性(slice运算符需要2个参数,第一个是path)。

其实我做的是:

.find({ conversation: conversationId })
      .sort('-updatedAt')
      .limit(10)
      .exec(function(err, messages) {

      });

但它返回的数组包含从最新到最旧的消息。 如果不在查询执行后恢复整个数组,我该怎么做才能保持良好的顺序? (messages.reverse();

2 个答案:

答案 0 :(得分:1)

您可以将订单更改为升序(旧到新)消息并获取所需的最后N个元素

.find().skip(db.collection.count() - N)

因此,您将获得升序orden中的最新消息

答案 1 :(得分:0)

获取10个最新文档

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

获取10个最旧的文档

MySchema.find().sort({ _id: 1 }).limit(10)