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

MongoDB按升序查询最近20条(最近)消息,mongodb,mongodb-query,Mongodb,Mongodb Query,存储聊天信息的My collection Schema正在跳过一些字段: 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的行,那么我希望结果为

存储聊天信息的My collection Schema正在跳过一些字段:

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}.sort{timestamp_ms:-1}.limit5

以降序给出结果,需要在内存中按9,8,7,6,5进行排序。有没有办法返回这些按5,6,7,8,9排序的记录

db.messages.find{convId:xyz}.sort{timestamp_ms:-1}.limit5.sort{timestamp_ms:1}

返回1,2,3,4,5


使用聚合管道可以解决这个问题吗?

是的,聚合框架就是您的朋友。像这样的方法应该会奏效:

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