Mongodb Aggregation框架组和排序

ass*_*z84 1 sorting mongodb aggregation-framework

我有以下文件结构......

{
  "id":"documentID"
  "sessionId":"sometext"
  "msg":"sometext"
  "time":"date"
}
Run Code Online (Sandbox Code Playgroud)
  • sessionId可以存在于许多文档中

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

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

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

{ $sort: { "time": 1 } },
{ "$group" : { 
    "_id" : "$sessionId", 
    "msgs" : { "$addToSet" : "$msg" }
} }
Run Code Online (Sandbox Code Playgroud)

有什么建议?你的回答非常感谢.

Mas*_*son 6

你可以这样做:

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

这将基于时间对集合进行排序,然后逐个会话ID.每个会话ID组都有一个子文档数组,其中包含消息的消息和时间.通过排序然后推送消息将按时间在消息数组中排序.