【发布时间】:2021-12-28 18:27:20
【问题描述】:
我正在尝试为 Mongo 查找查询创建一个模板,该模板将返回与数组属性的给定大小匹配的所有内容。例如,这是查找包含大小为 5 的数组的所有文档的查询:
{ arrayProperty: { $size: 5} }
问题:其中一些数组的值为“nil”,并且不希望在查询大小时计算这些值。例如,我希望在查询大小为 5 时返回包含这样结构的数组的文档:
[0,1,2,3,"nil"]
我已经在聚合框架中做了这样的事情:
[
{
$project: {
item: 1,
numberOfItems: { $size: {
$filter: {
input: "$arrayProperty",
cond: { $ne: [ "$$this", "nil" ] }
}
}
}
}
}
]
这是计算每个数组的长度/大小,并将该数字推送到名为 numberOfItems 的数组中。我相信我需要将过滤后的结果传递给 $size 运算符。不过,我似乎无法弄清楚如何在查找查询语法中利用这一点,我迫切需要一些帮助。
我所描述的流程的想法是这样的,尽管这是无效的:
{$expr:{
$filter: {
input: "$arrayProperty",
cond: { $ne: [ "$$this", "nil" ] }
}: { $size: 5 }
}}
谁能帮助我?如何正确地将过滤结果传递给 $size 运算符?我找不到人们试图做这样的事情的任何其他问题/答案。
另一种情况是当“nil”作为值嵌套在数组中的 JSON 对象中时,我知道这需要不同的解决方案。示例:
[
{
"arrayProperty": [
{
"model": "sedan",
"turbo": "nil"
},
{
"model": "sedan",
"turbo": "60cc"
}
]
},
{
"arrayProperty": [
{
"model": "coupe",
"turbo": "50cc"
},
{
"model": "coupe",
"turbo": "60cc"
}
]
}
]
【问题讨论】:
标签: mongodb find size aggregation