按嵌套对象键的Mongodb聚合计数
我想数一数获得了多少第一、第二等成绩,我事先不知道成绩的名称。我只想把第一阶段的所有成绩都计算在内。我如何使用聚合来计算这些数据?我看到另一个问题建议使用“展开”,但这似乎只适用于数组而不适用于对象? 创意按嵌套对象键的Mongodb聚合计数,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我想数一数获得了多少第一、第二等成绩,我事先不知道成绩的名称。我只想把第一阶段的所有成绩都计算在内。我如何使用聚合来计算这些数据?我看到另一个问题建议使用“展开”,但这似乎只适用于数组而不适用于对象? 创意 将对象转换为数组 放松,让他们分开 按id分组,添加1表示真,添加0表示假 db.artists.insertMany([ { "_id" : 1, "achievements" : {"third_record":true,
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} },
])
db.collection.aggregate([
{
$project: {
as: {
$objectToArray: "$achievements"
}
}
},
{
$unwind: "$as"
},
{
$group: {
_id: "$as.k",
number: {
$sum: {
"$cond": [
{
$eq: [
"$as.v",
true
]
},
1,
0
]
}
}
}
}
])