MongoDB - 如何从会话ID数组中获取最新消息

时间:2017-03-12 13:37:06

标签: mongodb mongodb-query aggregation-framework

我有一个包含以下文档的集合:

{
    "conversation_id" : 1,
    "message_id" : 4, //Message number inside the conversation
    "text" : "..."
}

如何从会话ID的数组中获取最新消息?

2 个答案:

答案 0 :(得分:1)

您可以使用aggregation来匹配数组中的对话ID,根据message_id执行降序$sort,然后$group为每个对话执行第一项:

var conversationIds = [1, 2];

db.conversations.aggregate({
    $match: {
        "conversation_id": {
            "$in": conversationIds
        }
    }
}, {
    $sort: {
        "message_id": -1
    }
}, {
    $group: {
        _id: "$conversation_id",
        message_id: {
            $first: "$message_id"
        },
        document: {
            $first: "$$ROOT"
        }
    }
})

答案 1 :(得分:0)

创建文档时,您必须添加名为created的新属性。然后,当您查询特定会话时,可以在created中提供的时间戳上对其进行排序。

您应该可以对_id进行排序,并且_id可以按照预先定义的方式进行排序。