查看以下查询:
db.models.findOne({ "value.userId": { $ne: null } }, { "value.userId":1}).value.userId == null
这说:
由于我们只返回没有空值的记录,因此将结果与null进行比较时应始终返回false。但是,此始终返回true。
如果我只是执行.findOne(...)并打印而不是进行比较,我得到:
{ "_id": 4, "value": { "userId": null }
任何人都知道这里发生了什么?
编辑:这个字段的“类型”显然是6 - 而不是10,这是null 应该。 EDIT2:显然类型6是“未定义” - 不确定为什么它打印为空...
答案 0 :(得分:3)
这里的问题是,当您尝试打印undefined
值时,MongoDB会打印null
而不是向您发送错误。
请参阅此示例: -
> db.foo.save({"amount": undefined})
> db.foo.find({"amount": {$ne: null}})
{ "_id" : ObjectId("50d0d3a1511dd1035f01c636"), "amount" : null }
因此,正如您所说,userId
的类型为6
,适用于undefined
,因此会打印null
。此外,它是$ne: null
,因此也匹配。
但是,如果您看到与null
相同的行为,您将获得所需的结果: -
> db.foo.save({"amount": null})
> db.foo.findOne({"amount": {$ne: null}})
null