代码之家  ›  专栏  ›  技术社区  ›  Jitendra

在mongodb中查找嵌套数组文档的第三级计数

  •  2
  • Jitendra  · 技术社区  · 7 年前

    'a' 以及数组中元素的总数 'Y' 'X' '是'

    收集类似如下:

    {
       X: [
        {
           Y:[
              {
                STATUS: 'a' 
              },
              {
                STATUS: 'a' 
              },
              {
                STATUS: 'b' 
              }
             ]
        } 
        ]
    }
    

    一个mongodb查询来查找状态计数 以及数组中元素的总数 '是'

    要求的结果是 “a” 2 元素的总数量 '是' 3 .

    2 回复  |  直到 7 年前
        1
  •  1
  •   mickl    7 年前

    $map 变换数组和 $filter 检查状态是否等于 "a" . $size 提供数组中的元素数。尝试:

    db.collection.aggregate([
        {
            $project: {
                X: {
                    $map: {
                        input: "$X",
                        as: "xx",
                        in: {
                            Y: {
                                total: { $size: "$$xx.Y" },
                                a: { $size: { $filter: { input: "$$xx.Y", as: "yy", cond: { $eq: [ "$$yy.STATUS", "a" ] }  } } }
                            }
                        }
                    }
                }
            }
        }
    ])
    
        2
  •  1
  •   Ashh    7 年前

    $map 环游世界 X 数组,然后使用 $filter 删除不匹配的元素。

    db.collection.aggregate([
      { "$project": {
        "X": {
          "$map": {
            "input": "$X",
            "as": "x",
            "in": {
              "aCount": {
                "$size": {
                  "$filter": {
                    "input": "$$x.Y",
                    "cond": { "$eq": ["$$this.STATUS", "a"] }
                  }
                }
              },
              "allCount": { "$size": "$$x.Y" }
            }
          }
        }
      }}
    ])