如何将"$size"与嵌入文档一起使用



我很难获得嵌入文档中数组的大小。

给定一个带有一些文档的集合:

{
"_id": { "$oid": "60e26137600b71f2939ebbe7" },
"name": "Outer doc",
"inner_docs": [
{ "name": "one", "vals": [1,2,3,4,5] },
{ "name": "two", "vals": [1,2,3,4] },
{ "name": "three", "vals": [1,2,3] }
]
}

通过将$project阶段与类似$size的聚合

{
"outer_num": { "$size": "$inner_docs" },
"inner_docs.num_vals": { "$size": "$inner_docs.vals" }
}

我得到了结果文档:

{
"_id": { "$oid": "60e26137600b71f2939ebbe7" },
"inner_docs": [
{ "name": "one", "num_vals": 3 },
{ "name": "two", "num_vals": 3 },
{ "name": "three", "num_vals": 3 }
],
"outer_num": 3,
}

outer_num正确,但num_vals不正确,应分别为值543

我该怎么解决这个问题?

演示-https://mongoplayground.net/p/dpsp907E_fa

使用$map

将表达式应用于数组中的每个项,并返回一个具有应用结果的数组。

db.collection.aggregate([
{
$project: {
"outer_num": { $size: "$inner_docs"},
"inner_docs": {
$map: {
input: "$inner_docs",
as: "doc",
in: { name: "$$doc.name", num_vals: { $size: [ "$$doc.vals" ] } }
}
}
}
}
])

最新更新