【发布时间】:2021-12-28 23:40:49
【问题描述】:
我有这样的 MongoDB 文档:
[
{
"id": "car_1",
"arrayProperty": [
{
"model": "sedan",
"turbo": "nil"
},
{
"model": "sedan",
"turbo": "60cc"
}
]
},
{
"id": "car_2",
"arrayProperty": [
{
"model": "coupe",
"turbo": "50cc"
},
{
"model": "coupe",
"turbo": "60cc"
}
]
}
]
我希望能够进行一个查找查询,将其翻译成基本英语为“忽略所有具有 'turbo' 的 'nil' 值的模型,返回所有具有长度为 X 的 arrayProperty 的文档。” 也就是说,汽车 1 的“arrayProperty”将被解释为大小为 1,而汽车 2 的数组大小为 2。目标是能够查询所有数组属性大小为 2 的汽车,并且只看到结果中返回的汽车 2。
不忽略 nil 值,查询很简单:
{ arrayProperty: { $size: 2} }
这将返回汽车 1 和 2。此外,如果我们的数组只是一个简单的数组,例如:
[1,2,3,'nil]
那么我们的查询就是:
{
arrayProperty: {
$size: X,
$ne: "nil"
}
}
但是,当我们引入 JSON 对象数组时,事情就变得棘手了。我尝试了很多事情都无济于事,包括:
"arrayProperty": {
$size: 2,
$ne: {"turbo": "nil"}
}
"arrayProperty": {
$size: 2,
$ne: ["arrayProperty.turbo": "nil"]
}
即使没有 $size 运算符,我似乎也无法按 nil 值进行过滤。有谁知道我将如何在最后两个查询中正确执行此操作?
【问题讨论】:
标签: arrays mongodb aggregation