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

Mongodb item:{$exists:false}和item:null之间有什么区别?,mongodb,mongodb-query,Mongodb,Mongodb Query,这样做的区别是什么: "AnArray.fieldA":null 及 为什么要在这样的文件上 { AnArray:[ {}, {fieldA:1} ] }, { AnArray:[ {fieldA:3}, {fieldA:1} ] } AnArray.fieldA:null返回我第一个文档,但是AnArray.fieldA:{$exists:false}不返回任何文档:解释得很好 {item:null}查询匹配包含值为null的item字段或

这样做的区别是什么:

"AnArray.fieldA":null

为什么要在这样的文件上

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

{
  AnArray:[
    {fieldA:3},
    {fieldA:1}
  ]
}
AnArray.fieldA:null返回我第一个文档,但是AnArray.fieldA:{$exists:false}不返回任何文档:

解释得很好

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

因此,如果数组中有任何缺少字段A的子文档,您的第一个查询将返回该文档


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

谢谢!但是我不明白为什么它被解释为[null,1]和[3,1],而不是[1]和[3,1]!这不是一个bug吗?@loki这是设计的,因为你有两个文档,它返回2元素数组。因为第一个文档中没有值,所以它会将其插值为null
{
  AnArray:[
    {},
    {fieldA:1}
  ]
},

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