MongoDB 和 Node.js:将 int32 保存为 double
MongoDB and Node.js: saving int32 as double
例如,我在 Node.js 中定义了一个变量
var foo = 15
我知道 JavaScript 将此值视为浮点数,我无法指定类型。我正在使用mongodb模块将此值保存到文档中:
当我使用 insert 方法保存值并将值传递给该方法时,我在 db 文档中观察到类型为 int32,但我需要 mongodb 将值保存为双精度 (15.0000(。
可以这样做吗?
是的,您可以将其另存为双精度。但正如@maerics所示,类型转换必须由您在 Nodejs 端完成。MongoDB不会为你做这件事。
对于您的解决方案:
var Double = require("mongodb").Double;
var foo = Double(15)
现在你可以在一个集合中插入foo,你会看到,它是双精度的。
MongoDB可能只将数值存储为双精度值。
MongoDB使用BSON,BSON是类似JSON文档的二进制编码序列化,而这些文档又是JavaScript对象文字的子集。 BSON 确实定义了"双精度"以及"int32"和"int64"类型;但是,目前尚不清楚这些整数类型是否可由MongoDB驱动程序直接使用,或者它们是否是抽象类型。
换个角度看;在JavaScript中,所有的数值都是数字,数字是IEEE 754双精度64位浮点数。 由于这个事实,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不会为您执行此操作。
相关文章:
- 如何将getJson的响应保存在全局变量中
- 按下按钮时保存cookie
- 如何使用 Angular JS 将数据保存在数据库中
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- HTML5在画布中加载较小的图像并保存实际大小的图像
- 是否可以在浏览器中使用纯JavaScript保存音频流
- 如何将多个画布保存为一个图像
- PHP:显示sqlite数据库中的html格式数据,使用tinymce保存
- 如何将乳胶配方奶粉图像保存到Asp.net中的文件夹中
- 保存数组javascript
- 保存串行端口列表与流星
- 将JavaScript变量保存到Rails模型
- Java脚本将URL转换为已保存的URL时出错
- 如何自动保存动态生成的HTML SVG元素
- Javascript/jQuery压缩一个图像正确的评论帖子,并使用Ajax Laravel 5.2保存到控制器中
- 将JQuery Handontable保存到服务器上的excel文件中
- NodeJS expressJS使用multer和passport将文件上传并保存到MongoDB
- 将数据保存到数据库(ajax/php)后,使文本字段变灰/禁用
- 保存表中的行's在数组中的tbody,稍后使用它们
- MongoDB 和 Node.js:将 int32 保存为 double