我正在检查用于查询非值的逻辑,并注意到在使用mongo
shell时,它会区分undefined
和null
值。
> use test
> db.test.insert({ a : 1, b : null, c : undefined })
> db.test.insert({ a : null, b : undefined, c : 1 })
> db.test.insert({ a : undefined, b : 1, c : null })
当你对集合进行查询时,你会得到:
> db.test.find()
{ "_id" : ObjectId("52d95575c9333565e80ccb22"), "a" : 1, "b" : null, "c" : null }
{ "_id" : ObjectId("52d9557fc9333565e80ccb23"), "a" : null, "b" : null, "c" : 1 }
{ "_id" : ObjectId("52d95586c9333565e80ccb24"), "a" : null, "b" : 1, "c" : null }
但是,当您在null
上进行查询时,它只会检索明确设置为null
的记录。
> db.test.find({ a : null })
{ "_id" : ObjectId("52d9557fc9333565e80ccb23"), "a" : null, "b" : null, "c" : 1 }
这是MongoDB中的错误吗? 如何正确查询null / undefined / non-set字段?
所以我可以用这个来查询未设置的值:
db.test.find({ $or : [ { a : null }, { a : { $exists : false } } ] })
但是在这个例子中,它仍然只返回单个记录:
{ "_id" : ObjectId("52d9557fc9333565e80ccb23"), "a" : null, "b" : null, "c" : 1 }
任何人都知道MongoDB为什么/如何区分undefined
和null
?这是如何在MongoDB中输入数据的问题吗?
答案 0 :(得分:6)
如果要返回字段存在且不为空的文档,请使用{ a : {$ne : null}}
未定义和null值不同,但shell将它们都显示为null - https://jira.mongodb.org/browse/SERVER-6102
答案 1 :(得分:0)
答案 2 :(得分:0)
如果您想知道,为什么MongoDB将undefined
强制转换为null
而不是仅仅忽略此类属性-ignoreUndefined
标志可以解决此问题。
https://mongodb.github.io/node-mongodb-native/2.1/reference/connecting/connection-settings/