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

在mongodb中的文档嵌套数组中查找状态和

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

     [
          {
            X: [
              {
                Y: [
                  {
                    STATUS: "a"
                  },
                  {
                    STATUS: "b"
                  },
                  {
                    STATUS: "c"
                  }
                ]
              },
              {
                Y: [
                  {
                    STATUS: "a"
                  },
                  {
                    STATUS: "b"
                  },
                  {
                    STATUS: "c"
                  }
                ]
              }
            ]
          }
        ]
    

    这里所需的结果是“X”中元素的总数为2,“X”中状态“a”的总数为2。

    在一次查询中尝试但无法获得准确的数据。

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

    你需要 $size 获取数组的长度 $filter 应用状态 a 条件。那你可以用 $reduce 简单地求和 一 对于 X 数组。尝试:

    db.collection.aggregate([
        {
            $project: {
                total_a: { 
                    $reduce: {
                        input: "$X",
                        initialValue: 0,
                        in: {
                            $add: [ "$$value", 
                                { $size: { $filter: { input: "$$this.Y", as: "yy", cond: { $eq: [ "$$yy.STATUS", "a" ] } } } } 
                            ]
                        }
                    }
                },
                total_X: { $size: "$X" }
            }
        }
    ])
    

    游乐场 here

    推荐文章