Mongodb聚合嵌套子文档

Mongodb聚合嵌套子文档,mongodb,mongodb-query,Mongodb,Mongodb Query,有文件清单 [ { "__v" : 21, "_id" : ObjectId("546330dbb8926d177052e9ff"), "code" : "WfvCc", "description" : "", "elements" : [ { "_id" : ObjectId("546471f61e13b76a0b20ccaf"), "comments" : [],

有文件清单

[
{
    "__v" : 21,
    "_id" : ObjectId("546330dbb8926d177052e9ff"),
    "code" : "WfvCc",
    "description" : "",
    "elements" : [ 
        {
            "_id" : ObjectId("546471f61e13b76a0b20ccaf"),
            "comments" : [],
            "meta" : {
                "createdBy" : "545ab39ef1b0c88a695fcf8d",
                "modifiedAt" : "1415868918045",
                "createdAt" : "1415868918045"
            },
            "title" : "awesome title",
            "votes" : {
                "count" : 3,
                "meta" : [ 
                    {
                        "createdBy" : "545ab39ef1b0c88a695fcf8d",
                        "_id" : ObjectId("546473831e13b76a0b20ccb7"),
                        "createdAt" : "1415869315618"
                    }, 
                    {
                        "createdBy" : "545aaddcf1b0c88a695fcf84",
                        "_id" : ObjectId("546473d71e13b76a0b20ccbc"),
                        "createdAt" : "1415869399584"
                    }, 
                    {
                        "createdBy" : "5461c0e2c9c39a192c44226c",
                        "_id" : ObjectId("546474041e13b76a0b20ccbe"),
                        "createdAt" : "1415869444056"
                    }
                ]
            }
        }
    ]
},
{
    "__v" : 21,
    "_id" : ObjectId("546330dbb8926d177052e9ff"),
    "code" : "WfvCc",
    "description" : "",
    "elements" : [ 
        {
            "_id" : ObjectId("546471f61e13b76a0b20ccaf"),
            "comments" : [],
            "meta" : {
                "createdBy" : "545ab39ef1b0c88a695fcf8d",
                "modifiedAt" : "1415868918045",
                "createdAt" : "1415868918045"
            },
            "title" : "awesome title",
            "votes" : {
                "count" : 3,
                "meta" : [ 
                    {
                        "createdBy" : "545ab39ef1b0c88a695fcf8d",
                        "_id" : ObjectId("546473831e13b76a0b20ccb7"),
                        "createdAt" : "1415869315618"
                    }, 
                    {
                        "createdBy" : "545aaddcf1b0c88a695fcf84",
                        "_id" : ObjectId("546473d71e13b76a0b20ccbc"),
                        "createdAt" : "1415869399584"
                    }, 
                    {
                        "createdBy" : "5461c0e2c9c39a192c44226c",
                        "_id" : ObjectId("546474041e13b76a0b20ccbe"),
                        "createdAt" : "1415869444056"
                    }
                ]
            }
        }
    ]
}
]
我想汇总用户列表<代码>元素.投票.元.创建数据库,并计算文档中出现的总次数*请注意,
elements.vows.meta.createdBy
在每个文档中都是唯一的,因此从理论上讲,这应该使它更简单

到目前为止,我提出了一个问题:

db.sessions.aggregate(
  { $project: { 
      meta: "$elements.votes.meta"
  }},
  { $unwind: "$meta" },
  { $group: {
      _id: "voters",
      voters: {
          $addToSet: "$meta.createdBy"
      }
  }}
)

只是为了再次完全陷入困境。我知道我需要一个双重分组,只是似乎无法解决。谢谢你的帮助

首先,您应该获得每个“用户”的总数。(即,{$group:{{u id:'$user',count:{'$sum':1}}}

然后只需按null分组,创建一个包含结果的文档,将每个用户添加到集合中,并将第一次分组的结果推送到数组字段中。(第二组)

结果:

{
    "result" : [ 
        {
            "_id" : null,
            "users" : [ 
                "545ab39ef1b0c88a695fcf8d", 
                "545aaddcf1b0c88a695fcf84", 
                "5461c0e2c9c39a192c44226c"
            ],
            "occurances" : [ 
                {
                    "user" : "5461c0e2c9c39a192c44226c",
                    "count" : 2
                }, 
                {
                    "user" : "545aaddcf1b0c88a695fcf84",
                    "count" : 2
                }, 
                {
                    "user" : "545ab39ef1b0c88a695fcf8d",
                    "count" : 2
                }
            ]
        }
    ],
    "ok" : 1
}

真棒,稍加修改,这正是我想要的。关键是将集合加倍
$unwind
。干杯
{
    "result" : [ 
        {
            "_id" : null,
            "users" : [ 
                "545ab39ef1b0c88a695fcf8d", 
                "545aaddcf1b0c88a695fcf84", 
                "5461c0e2c9c39a192c44226c"
            ],
            "occurances" : [ 
                {
                    "user" : "5461c0e2c9c39a192c44226c",
                    "count" : 2
                }, 
                {
                    "user" : "545aaddcf1b0c88a695fcf84",
                    "count" : 2
                }, 
                {
                    "user" : "545ab39ef1b0c88a695fcf8d",
                    "count" : 2
                }
            ]
        }
    ],
    "ok" : 1
}