mongodb - 聚合 - 嵌套 object
mongodb - aggregation - nested object
我运行聚合函数到return最喜欢的项目如下:
db.users.aggregate(
[
{ $unwind : "$favoriteItems" },
{ $group : { _id : "$favoriteItems" , number : { $sum : 1 } } },
{ $sort : { number : -1 } }
]
)
这是我的用户提供的原型文档collection
{
"_id": "5a68a9308117670afc3522cd",
"username": "user1",
"favoriteItems": {
"5a0c6711fb3aac66aafe26c6": {
"_id": "5a0c6711fb3aac66aafe26c6",
"name": "item1",
},
"5a0c6b83fd3eb67969316dd7": {
"_id": "5a0c6b83fd3eb67969316dd7",
"name": "item2",
},
"5a0c6b83fd3eb67969316de4": {
"_id": "5a0c6b83fd3eb67969316de4",
"name": "item3"
}
}
}
但是,聚合函数将 favoriteItems 计为一个项目,returns 计数为每个 favoriteItems,而不是 favoriteItems 中的元素。我在聚合函数中缺少什么?
您可以尝试在 3.4 中进行以下聚合。因此 $unwind
适用于数组而不适用于文档。
所以使用$objectToArray
将对象转换为键值对数组。
db.users.aggregate([
{"$addFields":{"favoriteItems":{"$objectToArray":"$favoriteItems"}}},
{"$unwind":"$favoriteItems"},
{"$group":{"_id":"$favoriteItems.k","number":{"$sum":1}}},
{"$sort":{"number":-1}}
])
我运行聚合函数到return最喜欢的项目如下:
db.users.aggregate(
[
{ $unwind : "$favoriteItems" },
{ $group : { _id : "$favoriteItems" , number : { $sum : 1 } } },
{ $sort : { number : -1 } }
]
)
这是我的用户提供的原型文档collection
{
"_id": "5a68a9308117670afc3522cd",
"username": "user1",
"favoriteItems": {
"5a0c6711fb3aac66aafe26c6": {
"_id": "5a0c6711fb3aac66aafe26c6",
"name": "item1",
},
"5a0c6b83fd3eb67969316dd7": {
"_id": "5a0c6b83fd3eb67969316dd7",
"name": "item2",
},
"5a0c6b83fd3eb67969316de4": {
"_id": "5a0c6b83fd3eb67969316de4",
"name": "item3"
}
}
}
但是,聚合函数将 favoriteItems 计为一个项目,returns 计数为每个 favoriteItems,而不是 favoriteItems 中的元素。我在聚合函数中缺少什么?
您可以尝试在 3.4 中进行以下聚合。因此 $unwind
适用于数组而不适用于文档。
所以使用$objectToArray
将对象转换为键值对数组。
db.users.aggregate([
{"$addFields":{"favoriteItems":{"$objectToArray":"$favoriteItems"}}},
{"$unwind":"$favoriteItems"},
{"$group":{"_id":"$favoriteItems.k","number":{"$sum":1}}},
{"$sort":{"number":-1}}
])