在下面的文档结构中,我需要找到数组“ X”中的元素总数以及“ X”中状态“ a”的总数。
[
{
X: [
{
Y: [
{
STATUS: "a"
},
{
STATUS: "b"
},
{
STATUS: "c"
}
]
},
{
Y: [
{
STATUS: "a"
},
{
STATUS: "b"
},
{
STATUS: "c"
}
]
}
]
}
]
此处所需的结果将是“ X”中元素的总数为2,而“ X”中状态“ a”的总数为2。
已尝试但无法在单个查询中获取准确的数据。
答案 0 :(得分:1)
您需要$size来获取数组的长度,并且需要$filter来应用状态a
的条件。然后,您可以使用$reduce对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