我需要从我的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();
)
答案 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)