Ale*_*lls 5 mongodb node.js meteor
是否有node.js模块允许我的应用程序具有与MongoDB相同的类型:
http://docs.mongodb.org/manual/reference/bson-types/
例如,在我的node.js应用程序中,我希望它完全理解Integer类型,但是根据我的理解,node.js不能识别除了Number之外的任何东西.
据我所知,node.js 除了开箱即用的 Number 之外什么都识别不了。
嗯,这是 JavaScript 的设计决定。JavaScript 只有一个Number类型,即如果实现遵循标准的建议,则表示为 IEEE-754 双精度浮点数。short这隐藏了vs. longvs. floatvs.double以及大多数其他语言中常见的所有其他数字类型的大部分复杂性。这也是一个很好的妥协,因为它们的整数精度高达 2^53 - 1,所以大多数时候你很少需要这个范围之外的东西,而且如果你这样做, a 通常也long不会削减它......
另一方面,MongoDB 是用 C++ 编写的,因此更接近数据在内存中实际存储方式的具体细节。弥合这一差距并非易事。
是否有一个 node.js 模块允许我的应用程序具有与 MongoDB 相同的类型?
在某种程度上,您正在与底层编程语言作斗争。如果存在这样的模块,它还必须以某种根本不同的方式实现大量操作,例如长加法(对于结果> 2^53-1)。例如,它可以通过将数字转换为字符串并手动添加各个数字来实现这一点,但这会非常慢。
类似的事情发生在 mongo shell 中,例如,对于非常长的整数,它使用类似 的语法NumberLong("1223")。但它并没有重新实现操作,而是退回到常规的 V8 JavaScript。证明:
> var foo = NumberLong("36028797018963968") // 2^55
> var foo2 = foo + NumberLong("1")
> foo2
36028797018963970 // should be 36028797018963969
Run Code Online (Sandbox Code Playgroud)
或者,这样的模块可以是使用本机编程语言(例如C++)的现有实现的本机模块。有一个名为“edge”的节点模块,显然是为 C# 做的。然而,这会带来相当大的复杂性,因为跨越语言边界需要编组,这既昂贵又难以正确完成。
换句话说:获得一组真正不同的类型需要另一种编程语言。让你的代码大致遵循你的模式是可能的,例如通过猫鼬或通过编码规则,但它不会使 JS 强类型化。
| 归档时间: |
|
| 查看次数: |
920 次 |
| 最近记录: |