1

我有以下文档结构...

{
  "id":"documentID"
  "sessionId":"sometext"
  "msg":"sometext"
  "time":"date"
}
  • sessionId 可以存在于多个文档中

我想按 聚合文档sessionId,每个会话的结果应包含与按时间排序的会话相关的消息集。

使用 MongoDB 聚合框架如何实现?

我尝试先排序然后分组,但每个会话中的消息由于某种原因没有排序:

{ $sort: { "time": 1 } },
{ "$group" : { 
    "_id" : "$sessionId", 
    "msgs" : { "$addToSet" : "$msg" }
} }

有什么建议么?非常感谢您的回答。

4

1 回答 1

6

你可以这样做:

db.collection.aggregate( 
    {$sort:{"time":1}},
    { $group:
        { _id: "$sessionId",
        messages: { "$push": {message: "$msg", time: "$time"} }
        }
    } 
)

这将根据时间对集合进行排序,然后按会话 ID 分组。每个会话 ID 组将有一个包含消息和消息时间的子文档数组。通过排序然后推送消息将在消息数组中按时间排序。

于 2013-08-15T02:05:12.993 回答