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"] }
}
}
}
}
}
}
}
}}
])