从MongoDB中检索信息

时间:2018-02-16 08:19:38

标签: mongodb mongoose

假设这是我的数据集

[
      {
        id: 1,
        roomId: 'abc',
        type: 'user-message',
        message: 'I am a message',
        date: DATE_ISO_FORMAT
      }, {
        id: 2,
        roomId: 'abc',
        type: 'bot-message',
        message: 'I am a bot message',
        date: DATE_ISO_FORMAT
      }, {
        id: 3,
        roomId: 'abc',
        type: 'user-message',
        message: 'I am another message',
        date: DATE_ISO_FORMAT
      }, {
        id: 4,
        roomId: 'abc',
        type: 'system-message',
        message: 'I am a system message',
        date: DATE_ISO_FORMAT
      }, {
        id: 5,
        roomId: 'abc',
        type: 'bot-message',
        message: 'I am another bot message',
        date: DATE_ISO_FORMAT
      }, {
        id: 6,
        roomId: 'xyz',
        type: 'user-message',
        message: 'I am user message from another room',
        date: DATE_ISO_FORMAT
      }
]

我想检索最后一条消息不是roomId的每个bot-message的最新消息,所以如果最后一条消息是bot-message我想要获取第二条最新消息消息可能是user-messagesystem-message类型的消息。我知道这将通过某种聚合,任何想法或起点来完成,我可以从中开始。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

完成查询

db.collection.aggregate([
    {$match:{type:{$ne:'bot-message'}}},
    {$sort:{date:-1}},
    {
     $group:
         {_id: "$roomId","date": { $first: "$date" },
        "type":{$first:"$type"},"message":{$first:"$message"}}
     }
    ])