这样做有什么区别:
"AnArray.fieldA":null
和
"AnArray.fieldA":{$exists:false}
为什么在像这样的文档上
{
AnArray:[
{},
{fieldA:1}
]
},
{
AnArray:[
{fieldA:3},
{fieldA:1}
]
}
"AnArray.fieldA":null
返回我的第一个文档,但"AnArray.fieldA":{$exists:false}
返回我没有文档:(
答案 0 :(得分:4)
here很好地解释了。
{item:null}查询将匹配包含值为null的item字段或不包含item字段的文档。
因此,如果AnArray
中的任何子文档中缺少fieldA
,则您的第一个查询将返回文档
$exists
的工作方式不同。 "AnArray.fieldA"
被解释为从指定路径获取的值的数组。对于您的文档,它是:[null, 1]
和[3,1]
。因此,只要至少有一个fieldA
$exists
将返回true
,并且您希望它返回false
,您将不会获得任何结果。