Вы можете попробовать ниже агрегации
db.collection.aggregate([
{ "$replaceRoot": {
"newRoot": {
"$arrayToObject": {
"$map": {
"input": {
"$map": {
"input": { "$objectToArray": "$values" },
"as": "val",
"in": { "k": "$$val.k", "v": { "$objectToArray": "$$val.v" }}
}
},
"as": "val",
"in": {
"k": "$$val.k",
"v": {
"$sum": {
"$map": {
"input": "$$val.v",
"as": "v2",
"in": { "$size": "$$v2.v.users" }
}
}
}
}
}
}
}
}}
])
Выход
[
{
"27": 7,
"28": 1
}
]
Для второго выхода
db.collection.aggregate([
{ "$replaceRoot": {
"newRoot": {
"$arrayToObject": {
"$map": {
"input": {
"$map": {
"input": { "$objectToArray": "$values" },
"as": "val",
"in": { "k": "$$val.k", "v": { "$objectToArray": "$$val.v" }}
}
},
"as": "val",
"in": {
"k": "$$val.k",
"v": {
"$arrayToObject": {
"$map": {
"input": "$$val.v",
"as": "v2",
"in": { "k": "$$v2.k", "v": { "$size": "$$v2.v.users" }}
}
}
}
}
}
}
}
}}
])
Выход
[
{
"27": {
"10": 1,
"6": 1,
"7": 2,
"8": 1,
"9": 2
},
"28": {
"11": 1
}
}
]
Еще один
db.collection.aggregate([
{ "$replaceRoot": {
"newRoot": {
"$arrayToObject": {
"$map": {
"input": {
"$map": {
"input": { "$objectToArray": "$values" },
"as": "val",
"in": {
"k": "$$val.k",
"v": { "$objectToArray": "$$val.v" }
}
}
},
"as": "val",
"in": {
"k": "$$val.k",
"v": [
{ "$arrayToObject": {
"$map": {
"input": "$$val.v",
"as": "v2",
"in": { "k": "$$v2.k", "v": { "$size": "$$v2.v.users" }}
}
}}
]
}
}
}
}
}}
])
Выход
[
{
"27": [
{
"10": 1,
"6": 1,
"7": 2,
"8": 1,
"9": 2
}
],
"28": [
{
"11": 1
}
]
}
]