参考 >mongo shell > mongoShell中的 数据类型
在本页面
MongoDB BSON支持除JSON之外的其他数据类型
。驱动程序以宿主语言为这些数据类型提供本机支持,并且
mongo
外壳程序还提供了一些帮助程序类来支持在mongo
JavaScript外壳程序中使用这些数据类型。有关
其他信息,请参见扩展JSON参考。
所述mongo
外壳提供了各种方法来返回日期,无论是作为一个字符串或作为Date
对象:
Date()
以字符串形式返回当前日期的方法。new Date()
构造函数,Date
使用ISODate()
包装器返回对象
。ISODate()
构造函数,Date
使用ISODate()
包装器返回对象
。在内部,Date对象存储为带符号的64位整数,表示自Unix纪元(1970年1月1日)以来的毫秒数。
并非所有的数据库操作和驱动程序都支持完整的64位范围。你可以安全使用日期与工作的包容性的范围内,年内
0
通过9999
。
要以字符串形式返回日期,请使用Date()
方法,如以下示例所示:
要打印变量的值,请在shell中键入变量名称,如下所示:
结果是的值myDateString
:
要验证类型,请使用typeof
运算符,如下所示:
操作返回string
。
mongo
默认情况下,Shell将所有数字视为浮点值。所述mongo
外壳提供了NumberLong()
包装到手柄64位整数。
该NumberLong()
包装接受,只要一个字符串:
以下示例使用NumberLong()
包装器写入集合:
检索文档以验证:
在返回的文档中,该calc
字段包含一个
NumberLong
对象:
如果使用$inc
来使包含NumberLong
对象的字段的值增加float,则数据类型将变为浮点值,如以下示例所示:
3.4版的新功能。
默认情况下,mongo
Shell将所有数字视为64位浮点
double
值。所述mongo
外壳提供了
NumberDecimal()
构造,以明确指定的128位为基础的十进制能够模拟与小数精度精确舍入的浮点值。此功能适用于处理
货币数据(例如金融,税收和科学计算)的应用程序。
所述decimal
BSON类型
使用其支持34位十进制数字的IEEE 754 DECIMAL128浮点编号格式(即显著位数)和-6143到6144的指数范围。
该NumberDecimal()
构造函数接受的decimal
值作为一个字符串:
该值存储在数据库中,如下所示:
该NumberDecimal()
构造也接受double
来自值mongo
壳(即不带引号),虽然这不是推荐,因为失去精度的风险。构造函数创建一个基于二进制的double
精度表示形式,该精度表示基于十进制的参数(可能会丢失精度),然后将该值转换decimal
为精度为15位数字的值。以下示例隐式地将值传递为a,double
并说明如何以15位精度创建值
:
该值存储在数据库中,如下所示:
下面的示例将值隐式传递为a,double
并说明如何发生精度损失:
该值存储在数据库中,如下所示:
注意
要将decimal
数据类型与MongoDB驱动程序一起使用,请确保使用支持该数据类型
的驱动程序。
将decimal
类型的值与其他数字类型进行比较,并根据它们的实际数字值对其进行排序。基于二进制的double
类型的数字值通常具有基于十进制的值的近似表示,并且可能与它们的decimal
表示不完全相同,因此NumberDecimal()
在检查decimal
值的相等性时请使用
构造
函数。考虑以下示例以及numbers
集合中的以下文档:
将下表中的查询插入该
db.numbers.find(<query>)
方法后,将返回以下结果:
询问 | 结果 |
---|---|
{“价”:9.99} | {“ _id”:2,“ val”:9.99,“ description”:“ Double”} |
{“ val”:NumberDecimal(“ 9.99”)} | {“ _id”:1,“ val”:NumberDecimal(“ 9.99”),“ description”:“ Decimal”} |
{val:10} | {“ _id”:3,“ val”:10,“ description”:“ Double”}
{“ _id”:4,“ val”:NumberLong(10),“ description”:“ Long”}
{“ _id”:5,“ val”:NumberDecimal(“ 10.0”),“ description”:“ Decimal”}
|
{val:NumberDecimal(“ 10”)} | {“ _id”:3,“ val”:10,“ description”:“ Double”}
{“ _id”:4,“ val”:NumberLong(10),“ description”:“ Long”}
{“ _id”:5,“ val”:NumberDecimal(“ 10.0”),“ description”:“ Decimal”}
|
第一个查询隐式搜索其
表示形式不等于值的
表示形式。{ "val": 9.99 }
double
9.99
decimal
该NumberDecimal()
构造函数用于查询与文档decimal
的表示9.99
。double
类型的值
被排除在外,因为它们与的decimal
表示形式的确切值不匹配9.99
。
查询整数时,将返回所有数字类型的匹配值。例如,查询的double
表示
10
将包括结果中的decimal
表示,10.0
反之亦然。