MongoDB获取文档数组中嵌套数组的总计数

MongoDB获取文档数组中嵌套数组的总计数,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我试图使用聚合框架将嵌套数组与嵌套数组相加,并按排序顺序返回原始文档 下面是我的医生的样子: myColl: { _id: 123, fruits: [{ name: apple, buyers: [{buyer1}, {buyer2}] }, { name: banana, buyers: [{buyer1}, {buyer2}, {buyer3}] ] } 正如您所能看到的,在myColl文档中,水果是子文档的数组,而买家是水果中的另一个子文档数组 我

我试图使用聚合框架将嵌套数组与嵌套数组相加,并按排序顺序返回原始文档

下面是我的医生的样子:

myColl: {
 _id: 123,
 fruits: [{
   name: apple,
   buyers: [{buyer1}, {buyer2}]
  },
  {
   name: banana,
   buyers: [{buyer1}, {buyer2}, {buyer3}]
 ]
}
正如您所能看到的,在myColl文档中,水果是子文档的数组,而买家是水果中的另一个子文档数组

我想要的是计算文档中所有水果的买家数组。因此,上述文件的买家总数应为“5”

然后,我想按总买家对myColl中的所有文档进行排序。我尝试了一些方法,但似乎无法正确操作:

db.myColl.aggregate([
{$unwind: '$fruits'},
{$unwind: '$fruits.buyers'},
        {$group: {
            _id: '$fruits.buyers',
            totalBuyers: {$sum: '1'},
                        docs: {$push: '$$ROOT'}
        }},
        {$sort: {'totalBuyers': 1}}])
没有提供所需的结果,并且TotalBullers始终为0。加上它返回的结果比myColl的总数还要多。我猜这与'u id'字段有关

我看了一些其他的SO问题,但找不到与我的情况相符或有效的东西


我最后的办法是自己计算,或者创建一个新的字段来计算,但如果我可以只运行一个查询,那么我的生活会轻松得多。

对,经过大量的修补和混乱,我有两个问题:

我的号码周围有引号,这是个愚蠢的错误。 2我需要通过$$ROOT

因此,以下是有效的解决方案:

db.myColl.aggregrate(
[
        {$unwind: '$fruits'},
        {$unwind: '$fruits.buyers'},
        {$group: {
            _id: '$$ROOT._id',
                        doc: {$first: '$$ROOT'},
            totalBuyers: {$sum: 1}
        }},
        {$sort: {'totalBuyers': -1}},
                {$limit : 10 }
    ]
)
请注意,我必须使用“$first”而不是“$push”,这样它只能在每个买家重复文档时检索第一个文档