如何在MongoDB中检查对象中是否存在嵌套键?

如何在MongoDB中检查对象中是否存在嵌套键?,mongodb,nested,key,aggregation,Mongodb,Nested,Key,Aggregation,所以问题是,我必须使用MongoDB中的“聚合”函数和“组”操作符来查找每个州的酒店数量。酒店必须至少有4.5颗星,并具有“Wi-Fi”属性,且值为true。我在链接下面附加了对象结构图像(Robo3T屏幕) “attributes”是业务集合的一个键,它可以有“Wi-Fi”之类的嵌套键,但不是必需的。我不知道如何检查这个键是否存在以及它的真实值。我写了一些代码,但没有检查(见下文) 我需要这个例子的帮助和很多解释。你不需要检查某个字段是否存在,只要你需要检查这个字段是否为真 因此,只需将“a

所以问题是,我必须使用MongoDB中的“聚合”函数和“组”操作符来查找每个州的酒店数量。酒店必须至少有4.5颗星,并具有“Wi-Fi”属性,且值为true。我在链接下面附加了对象结构图像(Robo3T屏幕)

“attributes”是业务集合的一个键,它可以有“Wi-Fi”之类的嵌套键,但不是必需的。我不知道如何检查这个键是否存在以及它的真实值。我写了一些代码,但没有检查(见下文)


我需要这个例子的帮助和很多解释。

你不需要检查某个字段是否存在,只要你需要检查这个字段是否为真 因此,只需将
“attributes.Wi-Fi”:true
添加到匹配对象中即可

因此,查询应该是

'attributes.Wi-Fi': true
如果需要检查某些属性(如Wi-Fi)是否不存在或是否等于false 那么查询应该是

一,-

2-或使用$or运算符

$or: [
    {
        'attributes.Wi-Fi': { $exists: false } // wifi attribute does not exist
    },
    {
        'attributes.Wi-Fi': false // or exists and equal to false
    }
]

如果需要,只需将这些查询添加到$match对象中即可

尝试将
“attributes.Wi-Fi”:true
添加到
$match
阶段。如果你只想要真实的值,那么检查是否存在是不必要的。是的,它确实有效。我认为在这个例子中检查一个存在性是必要的,但并非如此,只有检查true最终在这里起作用。谢谢你的解释和例子!
'attributes.Wi-Fi': { $ne: true } // wi-fi attribute is not equal to true, this means either wi-fi does not exist or exists but equals any value but not true
$or: [
    {
        'attributes.Wi-Fi': { $exists: false } // wifi attribute does not exist
    },
    {
        'attributes.Wi-Fi': false // or exists and equal to false
    }
]