item:{$ exists:false}和item:null之间有什么区别?

时间:2019-08-24 22:50:31

标签: mongodb mongodb-query

这样做有什么区别:

"AnArray.fieldA":null

"AnArray.fieldA":{$exists:false}

为什么在像这样的文档上

{
  AnArray:[
    {},
    {fieldA:1}
  ]
},

{
  AnArray:[
    {fieldA:3},
    {fieldA:1}
  ]
}

"AnArray.fieldA":null返回我的第一个文档,但"AnArray.fieldA":{$exists:false}返回我没有文档:(

1 个答案:

答案 0 :(得分:4)

here很好地解释了。

  

{item:null}查询将匹配包含值为null的item字段或不包含item字段的文档。

因此,如果AnArray中的任何子文档中缺少fieldA,则您的第一个查询将返回文档

$exists的工作方式不同。 "AnArray.fieldA"被解释为从指定路径获取的值的数组。对于您的文档,它是:[null, 1][3,1]。因此,只要至少有一个fieldA $exists将返回true,并且您希望它返回false,您将不会获得任何结果。