Mongodb Aggregation框架组和排序

时间:2013-08-14 21:51:35

标签: mongodb sorting aggregation-framework

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:6)

你可以这样做:

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

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