【问题标题】:MongoDB query for last 20(most recent) messages in ascending orderMongoDB 按升序查询最近 20 条(最近的)消息
【发布时间】:2018-07-26 02:10:45
【问题描述】:

我的集合架构(存储聊天消息)是(跳过一些字段):

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

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

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

我写的最接近的查询

db.messages.find({convId:"xyz"}).sort({timestamp_ms:-1}).limit(5)

将结果以降序(需要在内存中排序)为 9,8,7,6,5。有什么方法可以返回这些排序为 5,6,7,8,9 的记录

db.messages.find({convId:"xyz"}).sort({timestamp_ms:-1}).limit(5).sort({timestamp_ms:1​​})

返回 1,2,3,4,5

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

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    是的,聚合框架是你的朋友。这样的事情应该可以工作:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-31
      • 2018-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多