猫鼬任意改变长整数加倍

时间:2016-06-05 21:52:47

标签: node.js mongodb mongoose double long-integer

我在Mongoose中有一个字段定义为Mongoose类型long(使用mongoose-long扩展名),它包含一个64位整数。当我在MongoHub等检查器中查看该字段时,我清楚地看到该字段的值为NumberLong(0)

当我为该字段执行$ inc更新时(使用mongooseInstance.update(),该字段的增量为mongo.Long(x),当我查看检查器中的字段时,它就是{{1}到目前为止,非常好。

但是,只要x大于2147483647(2 ^ 31 -1),即从2147483648(2 ^ 31)开始,该字段的值突然NumberLong(x),而不是{{ 1}}。 Mongoose字面上选择将long转换为Double。当我直接从Mongo控制台执行没有mongoose的更新查询时,它完全正常。

另外,我已经尝试检查当最初存储的值是NumberLong(MAX_DOUBLE)时会发生什么,我假设Mongo将会是9218868437227405311(如果没有,请告诉我。我一直无法找到最大值双重值Mongo可以存储。我在哪里可以找到它?我如何找到?我在文档中遗漏了什么?)。通过Mongoose将2147483648.0增加NumberLong(2147483648)时,结果为NumberLong(9218868437227405311),即9218868437227405311 + 2147483648 + 1.该+1来自何处?发生了什么事?

请帮忙。

编辑:MVCE

  

ExampleSchema.js

NumberLong(2147483648)
  

test.js

9218868439374888960.0

0 个答案:

没有答案