[ { X: [ { Y: [ { STATUS: "a" }, { STATUS: "b" }, { STATUS: "c" } ] }, { Y: [ { STATUS: "a" }, { STATUS: "b" }, { STATUS: "c" } ] } ] } ]
这里所需的结果是“X”中元素的总数为2,“X”中状态“a”的总数为2。
在一次查询中尝试但无法获得准确的数据。
你需要 $size 获取数组的长度 $filter 应用状态 a 条件。那你可以用 $reduce 简单地求和 一 对于 X 数组。尝试:
a
一
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