首页 > 解决方案 > MongoDB:无法比较 NumberInt?

问题描述

在此处输入图像描述

为什么NumberInt(1) == NumberInt(1) // false

背景:我编写了 MongoDB 脚本来比较某些字段的文档。经过几个小时的挖掘,我发现这种NumberInt比较没有像我预期的那样工作。

比较数字的方法是什么?我在做:

在此处输入图像描述

标签: mongodbmongodb-querymongo-shell

解决方案


你做的比较正确。MongoDB shell 本质上是一个交互式 javascript shell。如果你typeof NumberInt(1)在 shell 中这样做,它会告诉你它是一个对象。所以,你不能真的期望一个对象等于另一个对象。这就是为什么NumberInt(1) == NumberInt(1) => false

由于您只对比较值感兴趣,因此.value函数可能在这里有所帮助。但是快速检查对象的属性不会产生任何结果:

> Object.keys(NumberInt(1))
[ ]
> Object.getOwnPropertyNames(NumberInt(1))
[ ]

如您所见,没有任何属性可用于了解对象的值。正如文档所说,NumberInt它只是一个构造函数/包装器,用于创建 32 位整数,因为 mongo shell 默认将所有数字视为浮点值。


推荐阅读