2

查看以下查询:

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

这说:

  1. 查找具有非空用户 ID 字段的记录
  2. 在结果中返回用户 ID
  3. 将该值与 null 进行比较

由于我们只返回没有 null 值的记录,因此将结果与 null 进行比较应该总是返回 false。但是,这始终返回 true。

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

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

有人知道这里发生了什么吗?

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

4

1 回答 1

3

这里的问题是当您尝试打印一个undefined值时,MongoDB 会打印null而不是向您发出错误。

看这个例子: -

> db.foo.save({"amount": undefined})
> db.foo.find({"amount": {$ne: null}})
{ "_id" : ObjectId("50d0d3a1511dd1035f01c636"), "amount" : null }

因此,正如您所说, is 的类型userId6for 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
于 2012-12-18T20:39:05.343 回答