我正在检查查询非值的逻辑,并注意到在使用mongoshell时,它区分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 })
Run Code Online (Sandbox Code Playgroud)
当您查询集合时,您会得到:
> 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 }
Run Code Online (Sandbox Code Playgroud)
null但是,当您查询时,它仅检索显式设置为的记录null.
> db.test.find({ a : null })
{ "_id" : ObjectId("52d9557fc9333565e80ccb23"), "a" : null, "b" : null, "c" : 1 }
Run Code Online (Sandbox Code Playgroud)
这是MongoDB中的错误吗? 如何正确查询null/undefined/non-set字段?
所以我可以使用以下方法查询未设置的值:
db.test.find({ $or : [ { a : null }, { a : { $exists : false } } ] })
Run Code Online (Sandbox Code Playgroud)
但是在这个例子中,它仍然只返回单个记录:
{ "_id" : ObjectId("52d9557fc9333565e80ccb23"), "a" : null, "b" : null, "c" : 1 }
Run Code Online (Sandbox Code Playgroud)
任何人都知道为什么/如何区分MongoDB undefined和null?这是如何在MongoDB中输入数据的问题吗?
如果要返回存在字段且不为空的文档,请使用 { a : {$ne : null}}
未定义和空值不同,但shell将它们都显示为null - https://jira.mongodb.org/browse/SERVER-6102
| 归档时间: |
|
| 查看次数: |
7076 次 |
| 最近记录: |