我正在尝试将具有子数组元素值的行数计算为 true。
{
_id: 1,
name: 'test',
items: [{'name': 'harry', valid: true}]
},
{
_id: 2,
name: 'walter',
items: [{'name': 'potter', valid: false}]
},
{
_id: 3,
name: 'walter',
items: [{'name': 'baby', valid: true}]
}
我需要使用聚合函数进行计数。结果是,
count 3, valid: 2, nonValid: 1
任何人都可以帮助我吗?
db.collection.aggregate([
{ "$group": {
"_id": null,
"count": { "$sum": 1 },
"valid": {
"$sum": {
"$size": {
"$filter": {
"input": "$items",
"cond": "$$this.valid"
}
}
},
"nonValid": {
"$sum": {
"$size": {
"$filter": {
"input": "$items",
"cond": { "$not": "$$this.valid" }
}
}
}
}
}}
])
您只需要一个$group
管道和$sum
累加器。“计数数组”是通过$size
从需要布尔表达式的$filter
where 的匹配元素完成的cond
。
由于valid
在阵列项目已经是布尔值,返回的值必须true
是valid
计数,或者是$not
true
nonValid
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句