MongoDB聚合-子数组中计数不同

MongoDB聚合-子数组中计数不同,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我试图在每个文档的子数组中计算不同的值。到目前为止,我得到了总数。 我的收藏: [ { "_id": "5e013ca474082f6852", "name": [ { "value": "Oak", "date": "2020-01-01 00:10:57" } ], "colors": [ { "nice": "bla bala", "color": "Bl

我试图在每个文档的子数组中计算不同的值。到目前为止,我得到了总数。 我的收藏:

[
  {
    "_id": "5e013ca474082f6852",
    "name": [
      {
        "value": "Oak",
        "date": "2020-01-01 00:10:57"
      }
    ],
    "colors": [
      {
        "nice": "bla bala",
        "color": "Blue"
      },
      {
        "nice": "bla bala",
        "color": "Red"
      },
      {
        "nice": "bla bala",
        "color": "Blue"
      },
      {
        "nice": "bla bala",
        "color": "Green"
      },
      {
        "nice": "bla bala",
        "color": "Green"
      }
    ]
  },
  {
    "_id": "57689a4740857bb2",
    "name": [
      {
        "value": "Cloud",
        "date": "2020-01-01 00:10:57"
      }
    ],
    "colors": [
      {
        "nice": "bla bala",
        "color": "Blue"
      },
      {
        "nice": "bla bala",
        "color": "Blue"
      },
      {
        "nice": "bla bala",
        "color": "Blue"
      },
      {
        "nice": "bla bala",
        "color": "Green"
      },
      {
        "nice": "bla bala",
        "color": "Green"
      }
    ]
  }
]
我搜索的结果是:

[
  {
    "_id": "5e013ca474082f6852",
    "name": [
      {
        "value": "Oak",
        "date": "2020-01-01 00:10:57"
      }
    ],
    "colors": {
      "Blue": 2,
      "Red": 1,
      "Green": 2
    }
  },
  {
    "_id": "57689a4740857bb2",
    "name": [
      {
        "value": "Cloud",
        "date": "2020-01-01 00:10:57"
      }
    ],
    "colors": {
      "Blue": 3,
      "Green": 2
    }
  }
]
谢谢 另外,我没有尝试使用$group进行聚合,因为到目前为止我得到的都是无用的:)
P.P.S.关于我的问题,我不知道还能说些什么,所以说代码太多,文本不够

您可以使用下面的聚合

db.collection.aggregate([
  { "$addFields": {
    "colors": {
      "$arrayToObject": {
        "$map": {
          "input": { "$setUnion": ["$colors.color"] },
          "as": "m",
          "in": {
            "k": "$$m",
            "v": {
              "$size": {
                "$filter": {
                  "input": "$colors",
                  "as": "d",
                  "cond": { "$eq": ["$$d.color", "$$m"] }
                }
              }
            }
          }
        }
      }
    }
  }}
])