Mongodb 如何计算按嵌套数组分组的文档数?

Mongodb 如何计算按嵌套数组分组的文档数?,mongodb,Mongodb,我有一些文件,如: { "product" : [{ "name" : "apple", "seller" : [ { "name" : "Alice", "gender" : 1 },

我有一些文件,如:

{
    "product" : [{
        "name" : "apple",
        "seller" : [
            {
                "name" : "Alice",
                "gender" : 1
            },
            {
                "name" : "Bob",
                "gender" : 0
            }
        ]
    }, {
        "name" : "anotherApple",
        "seller" : [
            {
                "name" : "Bob",
                "gender" : 0
            }
        ]
    }],
    "date" : "someDay"
},
{
    "product" : [{
        "name" : "apple",
        "seller" : [
            {
                "name" : "Alice",
                "gender" : 1
            },
            {
                "name" : "CName",
                "gender" : 0
            }
        ]
    }],
    "date" : "someDay"
}
我想数一数一个卖家的账单,在这种情况下,应该是:

{
    "Alice" : 2,
    "Bob" : 1,
    "CName" : 1
}

我尝试过一些方法,比如在
product
中放松
seller
,但都不起作用。我如何才能做到这一点?

我使用了
addToSet
来创建ID列表。 并在项目中使用
$size
计算它们

db.collection.aggregate({
  "$unwind": "$product"
},
{
  "$unwind": "$product.seller"
},
{
  $group: {
    _id: "$product.seller.name",
    list_ids: {
      "$addToSet": "$_id"
    }
  }
},
{
  $project: {
    "_id": 1,
    "size": {
      $size: "$list_ids"
    }
  }
})
巫婆给了我

[
  {
    "_id": "CName",
    "size": 1
  },
  {
    "_id": "Alice",
    "size": 2
  },
  {
    "_id": "Bob",
    "size": 1
  }
]

试试看

我使用了
addToSet
来创建ID列表。 并在项目中使用
$size
计算它们

db.collection.aggregate({
  "$unwind": "$product"
},
{
  "$unwind": "$product.seller"
},
{
  $group: {
    _id: "$product.seller.name",
    list_ids: {
      "$addToSet": "$_id"
    }
  }
},
{
  $project: {
    "_id": 1,
    "size": {
      $size: "$list_ids"
    }
  }
})
巫婆给了我

[
  {
    "_id": "CName",
    "size": 1
  },
  {
    "_id": "Alice",
    "size": 2
  },
  {
    "_id": "Bob",
    "size": 1
  }
]

试试看

我不明白,Bob出现了两次,为什么不把它算作2呢?因为结果应该是文档数,而2是产品数@Omar AbbasI不明白,Bob发生了两次,为什么不把它算作2呢?因为结果应该是文档数,而2是产品数@Omar AbbasWell,我以前也试过同样的代码。我想计算文档的数量,但是你代码的结果就是产品的数量。哦,我明白了。我没有正确理解你想要实现的目标。我已经更新了我的答案。嗯,我以前也试过同样的代码。我想计算文档的数量,但是你代码的结果就是产品的数量。哦,我明白了。我没有正确理解你想要实现的目标。我已经更新了我的答案