根据子数组元素的值计算行数

沙姆纳德

我正在尝试将具有子数组元素值的行数计算为 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需要布尔表达式$filterwhere 的匹配元素完成的cond

由于valid在阵列项目已经是布尔值,返回的值必须truevalid计数,或者$not truenonValid

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章