【问题标题】:Mongodb Aggregation framework group and sortMongodb聚合框架分组和排序
【发布时间】:2013-08-14 21:51:35
【问题描述】:

我有以下文档结构...

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

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

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

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

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

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

【问题讨论】:

  • $addToSet 未排序,需要使用 $push
  • 谢谢 .. 如果我想知道每个 msg 的时间也在结果中吗?

标签: mongodb sorting aggregation-framework


【解决方案1】:

你可以这样做:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 2021-01-15
    相关资源
    最近更新 更多