admin管理员组

文章数量:814905

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和Nodejs将int32保存为双精度