我想检查一个字段是否存在于一个对象数组中,假设文档中有一个名为attributes的数组:
[
{
attributes: [
{
name: "Cool",
value: true
}
]
}
]
我希望找到未指定的项。我将使用$或运算符来查找空值
$attributes: {
$elemMatch: {
$or: [
{ name: 'cool', value: '' },
{ name: 'cool', value: { $exists: false } },
{ name: {ne: 'cool' } ?????
]
}
}
但我想查找{name:'Cool'}不在数组中,我无法理解语法。
任何帮助都将是巨大的,非常感谢
2条答案
按热度按时间4sup72z81#
在
$elemMatch
表达式之外,简单的$ne
用法就足够了,Mongo对大多数查询“扁平化”数组,因此如果数组中的单个元素与查询匹配,它就满足条件。在您的情况下,如果您使用
$ne
,并且cool
是其中一个元素,则条件将为“匹配”,文档将被排除,如下所示:Mongo Playground
5sxhfpxr2#
我遇到过一个类似的用例,数组中的任何元素都与搜索到的值不匹配,因此,我扩展了这个问题的答案。
如果在$elemMatch表达式中指定单个查询 predicate ,并且在$elemMatch中不使用$not或$ne运算符,则可以省略$elemMatch。reference
此查询返回结果数组中任何名称都不是“Cool”的文档。
此查询返回结果数组中所有名称都不是“Cool”的文档。