我在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