我有以下文档结构......
{
"id":"documentID"
"sessionId":"sometext"
"msg":"sometext"
"time":"date"
}
我希望按sessionId
聚合文档,每个会话的结果应包含与按时间排序的会话相关的消息集。
使用MongoDB聚合框架我该如何实现?
我尝试先排序然后分组,但每个会话中的消息由于某种原因没有排序:
{ $sort: { "time": 1 } },
{ "$group" : {
"_id" : "$sessionId",
"msgs" : { "$addToSet" : "$msg" }
} }
有什么建议吗?你的回答非常感谢。
答案 0 :(得分:6)
你可以这样做:
db.collection.aggregate(
{$sort:{"time":1}},
{ $group:
{ _id: "$sessionId",
messages: { "$push": {message: "$msg", time: "$time"} }
}
}
)
这将根据时间对集合进行排序,然后逐个会话ID。每个会话ID组都有一个子文档数组,其中包含消息的消息和时间。通过排序然后推送消息将按时间排序在消息数组中。