MongoDB空查询异常

时间:2012-12-18 19:49:27

标签: mongodb

查看以下查询:

 db.models.findOne({ "value.userId": { $ne: null } }, { "value.userId":1}).value.userId == null

这说:

  1. 查找具有非空用户ID字段的记录
  2. 在结果中返回用户ID
  3. 将该值与null进行比较
  4. 由于我们只返回没有空值的记录,因此将结果与null进行比较时应始终返回false。但是,此始终返回true。

    如果我只是执行.findOne(...)并打印而不是进行比较,我得到:

    { "_id": 4, "value": { "userId": null }
    

    任何人都知道这里发生了什么?

    编辑:这个字段的“类型”显然是6 - 而不是10,这是null 应该。 EDIT2:显然类型6是“未定义” - 不确定为什么它打印为空...

1 个答案:

答案 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,因此也匹配。

请参阅此链接: - http://realprogrammer.wordpress.com/2012/11/04/null-undefined-nan-and-missing-property-goto-considered-harmful-part-2/


但是,如果您看到与null相同的行为,您将获得所需的结果: -

> db.foo.save({"amount": null})
> db.foo.findOne({"amount": {$ne: null}}) 
null