db.artists.insertMany([
{ "_id" : 1, "achievements" : {"third_record":true, "second_record": true} },
{ "_id" : 3, "achievements" : {"sixth_record":true, "second_record": true} },
{ "_id" : 2, "achievements" : {"first_record":true, "fifth_record": true} },
{ "_id" : 4, "achievements" : {"first_record":true, "second_record": true} },
])
我想统计一下获得了多少个first_record、second_record等成就,我事先不知道成就的名字。我只是想让它统计第一阶段匹配的所有成就。我如何使用聚合来计算这个?我看到另一个问题建议使用 unwind 但这似乎仅适用于数组而不适用于对象?
答案 0 :(得分:1)
db.collection.aggregate([
{
$project: {
as: {
$objectToArray: "$achievements"
}
}
},
{
$unwind: "$as"
},
{
$group: {
_id: "$as.k",
number: {
$sum: {
"$cond": [
{
$eq: [
"$as.v",
true
]
},
1,
0
]
}
}
}
}
])
想法