mongodb查找此文档的原因($ne:null表示数组)

mongodb查找此文档的原因($ne:null表示数组),mongodb,Mongodb,数据: db.inventory.insertMany([ { _id: 1, item: null }, { _id: 2 }, { _id: 3, item: 3 }, { _id: 4 items: [1, 2, 3] }, { _id: 5, items: [] } ]) 问题1: db.inventory.find({ 'item': {$ne: null} }) 结果1: { _id: 3, item:

数据:

db.inventory.insertMany([
       { _id: 1, item: null },
       { _id: 2 },
       { _id: 3, item: 3 },
       { _id: 4 items: [1, 2, 3] },
       { _id: 5, items: [] }
    ])
问题1:

db.inventory.find({ 'item': {$ne: null} })
结果1:

{ _id: 3, item: 3 }
问题2:

db.inventory.find({ 'items.0': {$ne: null} })
结果2:

{ _id: 3, items: [1, 2, 3] },
{ _id: 4, items: [] }
为什么mongoDB会找到这个文档:{u id:4,items:[]}?
这是错误吗?

使用
$exists:true
而不是
$ne:null

说明:

$ne选择字段值不等于指定值的文档这包括不包含该字段的文档。

  • null
    本身就是mongodb中的数据类型。这就是为什么在
    项目的
    0
    索引中 它正在搜索
    null
    值,但没有得到它。如果您添加
    null
    like
    项:[null]
    然后再次运行查询,您将不会看到
    \u id:4

  • 这不是一个bug。这就是Mongo的工作原理

  • 在第一个结果中,对象本身中的键
    。要满足
    'item':{$ne:null}
    项本身必须存在于对象中。这也是javascript的工作原理。检查一下

  • 它也适用于阵列。尝试:
    {'items.0':null}
    {'items.0':{$ne:null}}
    ,您应该会看到区别


  • 但是为什么第一个结果缺少document
    {u id:2}
    .docs.mongodb.com/manual/tutorial/query-for-null-fields在本例中,查询db.inventory.find({item:null})显示一个没有项的文档。为什么这不适用于阵列?在本例中,查询db.inventory.find({item:null})显示一个没有item的文档。为什么这不适用于阵列?我不知道,你可以继续问。谢谢链接。