参考 >mongo shell > mongoShell中的 数据类型
在本页面
MongoDB BSON支持除JSON之外的其他数据类型
。驱动程序以宿主语言为这些数据类型提供本机支持,并且
mongo外壳程序还提供了一些帮助程序类来支持在mongoJavaScript外壳程序中使用这些数据类型。有关
其他信息,请参见扩展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版的新功能。
默认情况下,mongoShell将所有数字视为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 }double9.99decimal
该NumberDecimal()构造函数用于查询与文档decimal的表示9.99。double类型的值
被排除在外,因为它们与的decimal表示形式的确切值不匹配9.99。
查询整数时,将返回所有数字类型的匹配值。例如,查询的double表示
10将包括结果中的decimal表示,10.0反之亦然。