在mongoDB中,我们如何获取数组中特定键的计数
{
"_id" : ObjectId("52d9212608a224e99676d378"),
"business" : [
{
"name" : "abc",
"rating" : 4.5
},
{
"name" : "pqr"
},
{
"name" : "xyz",
"rating" : 3.6
}
]
}
在上面的例子中,business是一个数组(带有“name”和/或“rating”键)
如何才能获得仅存在“评级”密钥的业务数据计数?
预期输出为:2
答案 0 :(得分:7)
看起来你必须使用Aggregation Framework。特别是你需要$unwind你的数组,然后只匹配包含rating
字段的元素,然后将$group文档恢复为原始格式。
尝试这样的事情:
db.test.aggregate([
{ $match: { /* your query criteria document */ } },
{ $unwind: "$business" },
{ $match: {
"business.rating": { $exists: 1 }
}
},
{ $group: {
_id: "$_id",
business: { $push: "$business" },
business_count: { $sum: 1 }
}
}
])
结果如下所示:
{
_id: ObjectId("52d9212608a224e99676d378"),
business: [
{ name: "abc", rating: 4.5 },
{ name: "xyz", rating: 3.6 }
],
business_count: 2
}
UPD 看起来OP不希望通过包装文档_id
字段对结果进行分组。不幸的是$group
表达式必须指定_id
值,否则会因异常而失败。但是,这个值实际上可以是常量(例如,普通null
或'foobar'
),因此只有一个结果组具有集合聚合。