MongoDB按升序查询最近20条(最新)消息

时间:2018-02-15 10:41:13

标签: mongodb mongodb-query

我的收藏架构(存储聊天消息)是(跳过某些字段):

timestamp_ms: epoch time to send message in milliseconds
text: string text
sender: sender id
convId: conversation id

当用户打开对话时,我想显示最近5条消息。所以我需要一个查询,它会选择最近的5条消息,然后按时间顺序返回它们按升序排序

例如,如果我有时间戳的行:1,2,3,4,5,6,7,8,9那么我想要结果为5,6,7,8,9

我写的最接近的查询

  

db.messages.find({convId: “XYZ”})排序({TIMESTAMP_MS:-1})。极限(5)

以降序(需要在内存中排序)给出结果为9,8,7,6,5。有没有办法返回这些记录,分类为5,6,7,8,9

  

db.messages.find({convId: “XYZ”})排序({TIMESTAMP_MS:-1})。极限(5)的.sort({TIMESTAMP_MS:1})

返回1,2,3,4,5

可以使用聚合管道来解决吗?

1 个答案:

答案 0 :(得分:1)

是的,聚合框架是你的朋友。这样的事情应该有效:

db.messages.aggregate([
    {$match: {convId:"xyz"}},
    {$sort:{timestamp_ms:-1}},
    {$limit:5},
    {$sort:{timestamp_ms:1}}
])
相关问题