【问题标题】:Find counts from third level of nested array document in mongodb从 mongodb 中的第三级嵌套数组文档中查找计数
【发布时间】:2019-03-24 01:53:22
【问题描述】:

我需要在单个查询中找到状态为'a' 的计数以及数组'Y' 中元素的总数,其中'X''Y' 是嵌套的文档数组。

集合类似如下:

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

单个 mongodb 查询以查找状态计数 'a' 和数组 'Y' 中的元素总数。

所需结果是 'a' 的计数,即 2'Y' 中的元素总数,即 3

【问题讨论】:

  • 你能发布 JSON 输出吗
  • 由于某种原因我无法共享 doc json。

标签: mongodb mongoose aggregation-framework


【解决方案1】:

您可以使用$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】:

你可以使用下面的聚合

首先使用$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" }
        }
      }
    }
  }}
])

【讨论】:

    猜你喜欢
    • 2021-01-05
    • 1970-01-01
    • 2018-02-18
    • 2019-10-09
    • 2021-10-28
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 2023-02-01
    相关资源
    最近更新 更多