我在Node.js中定义了一个变量,例如
var foo = 15
我知道JavaScript会将此值视为浮点数,但我无法指定类型。 我正在使用mongodb模块将此值保存到文档中:
当我使用insert方法保存值并将值传递给方法时,我在db文档中观察到类型为int32,但我需要mongodb将值保存为double(15.0000)。
可以这样做吗?
答案 0 :(得分:0)
MongoDB使用BSON,它是类似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.
如您所见,无论人们可能期望看到什么数字类型,所有内容都存储为双精度浮点值。
最终,如果必须使用MongoDB,并且某些数据库客户端必须处理具有特定数字类型的数值(例如int32,int64),那么客户端本身必须执行类型转换,因为MongoDB不会为您执行此操作。
答案 1 :(得分:0)
是的,您可以将其另存为两倍。但是,如@maerics所示,类型转换必须由您在Nodejs方面完成。 MongoDB不会为您这样做。
为您提供解决方案:
var Double = require("mongodb").Double;
var foo = Double(15)
现在您可以在集合中插入foo,您将看到它在其中为double。