假设这是我的数据集
[
{
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-message
或system-message
类型的消息。我知道这将通过某种聚合,任何想法或起点来完成,我可以从中开始。
非常感谢任何帮助。
答案 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"}}
}
])