精度"/>
MongoDB和Node.js:将int32保存为双精度
例如,我在Node.js中定义了一个变量
var foo = 15
我知道JavaScript将此值视为浮点数,因此无法指定类型。我正在使用mongodb模块将该值保存到文档中:
[当我使用insert方法保存值并将该值传递给该方法时,我在db文档中观察到类型为int32,但是我需要mongodb将值保存为double(15.0000)。
可以这样做吗?
回答如下:MongoDB可能仅将数值存储为双精度。
MongoDB使用BSON,它是JSON类文档的二进制编码序列化,而JSON类文档又是JavaScript对象文字的子集。 BSON确实定义了“ double”以及“ int32”和“ int64”类型。但是,尚不清楚这些整数类型是否可以由MongoDB驱动程序直接使用,或者它们是否是抽象类型。
换种方式看;在JavaScript中,所有数值均为Numbers,数字均为IEEE 754 double precision 64-bit floating point numbers。因此,JavaScript本身不区分整数和浮点类型。
为了进一步了解MongoDB本身如何处理数字类型,您可以使用mongo shell进行播放:
$ mongo foo
> db.foo.insert({looksLike:'int', value:15})
> db.foo.insert({looksLike:'float', value:15.0})
> db.foo.insert({looksLike:'int64', value:Math.pow(2, 60)})
> db.foo.find({value:{ $type: 1 }}, {_id:0}) // Type 1 is "double".
{ "looksLike" : "int", "value" : 15 }
{ "looksLike" : "float", "value" : 15 }
{ "looksLike" : "int64", "value" : 1152921504606847000 } // Note inexact value.
如您所见,无论人们期望看到哪种数值类型,所有内容都将存储为双精度浮点值。
另请参见this discussion。
最终,如果必须使用MongoDB,并且某些数据库客户端必须处理具有特定数值类型(例如int32,int64)的数值,则客户端本身必须执行类型转换,因为MongoDB不会为您执行此操作。
更多推荐
MongoDB和Node.js:将int32保存为双精度
发布评论