4.Data Types in the mongo Shell-官方文档摘录
总结:
1.MongoDB 的BSON格式支持额外的数据类型
2 Date 对象内部存储64位字节存整数,存储使用NumberLong()这个类来存,使用NumberInt()存32位整数,128位十进制的用NumberDecimal()存储(这个函数是为了方便的存储财政数据)
db.collection.insertOne( { _id: 10, calc: NumberLong("2090845886852") } )
3 时间的三个方法
test@gzxkvm52> var myDateString=Date()
test@gzxkvm52> myDateString
Mon Jul 24 2017 11:16:12 GMT+0800 (CST)
test@gzxkvm52> var myDate = new Date();
test@gzxkvm52> var myDateInitUsingISODateWrapper = ISODate();
test@gzxkvm52> myDate
ISODate("2017-07-24T03:17:54.900Z")
test@gzxkvm52> myDateInitUsingISODateWrapper
ISODate("2017-07-24T03:18:02.774Z")
4 使用NunberDecimal需要注意的问题(需要使用双引号,否则会有精度问题)
test@gzxkvm52> aa = NumberDecimal("12.444444")
NumberDecimal("12.444444")
test@gzxkvm52> aa
NumberDecimal("12.444444")
test@gzxkvm52> bb = NumberDecimal(12.444444)
NumberDecimal("12.4444440000000")
test@gzxkvm52> bb
NumberDecimal("12.4444440000000")
test@gzxkvm52> bb = NumberDecimal(12.464444)
NumberDecimal("12.4644440000000")
test@gzxkvm52> bb
NumberDecimal("12.4644440000000")
test@gzxkvm52> cc = NumberDecimal(9999999.4999999999
...
... )
NumberDecimal("9999999.50000000")
test@gzxkvm52> cc
NumberDecimal("9999999.50000000")
test@gzxkvm52> dd = NumberDecimal("9999999.4999999999")
NumberDecimal("9999999.4999999999")
test@gzxkvm52> dd
NumberDecimal("9999999.4999999999")
5 使用instanceof判断数据类型(真假)
MongoDB BSON provides support for additional data types than JSON. Drivers provide native support for these data types in host languages and the mongo
shell also provides several helper classes to support the use of these data types in the mongo
JavaScript shell. See the Extended JSON reference for additional information.
Types
Date
The mongo
shell provides various methods to return the date, either as a string or as a Date
object:
Date()
method which returns the current date as a string.new Date()
constructor which returns aDate
object using theISODate()
wrapper.ISODate()
constructor which returns aDate
object using theISODate()
wrapper.
Internally, Date objects are stored as a 64 bit integer representing the number of milliseconds since the Unix epoch (Jan 1, 1970), which results in a representable date range of about 290 millions years into the past and future.
Return Date as a String
To return the date as a string, use the Date()
method, as in the following example:
var myDateString = Date();
To print the value of the variable, type the variable name in the shell, as in the following:
myDateString
The result is the value of myDateString
:
Wed Dec 19 2012 01:03:25 GMT-0500 (EST)
To verify the type, use the typeof
operator, as in the following:
typeof myDateString
The operation returns string
.
Return Date
The mongo
shell wraps objects of Date
type with the ISODate
helper; however, the objects remain of typeDate
.
The following example uses both the new Date()
constructor and the ISODate()
constructor to returnDate
objects.
var myDate = new Date();
var myDateInitUsingISODateWrapper = ISODate();
You can use the new
operator with the ISODate()
constructor as well.
To print the value of the variable, type the variable name in the shell, as in the following:
myDate
The result is the Date
value of myDate
wrapped in the ISODate()
helper:
ISODate("2012-12-19T06:01:17.171Z")
To verify the type, use the instanceof
operator, as in the following:
myDate instanceof Date
myDateInitUsingISODateWrapper instanceof Date
The operation returns true
for both.
ObjectId
The mongo
shell provides the ObjectId()
wrapper class around the ObjectId data type. To generate a new ObjectId, use the following operation in the mongo
shell:
new ObjectId
SEE
NumberLong
The mongo
shell treats all numbers as floating-point values by default. The mongo
shell provides theNumberLong()
wrapper to handle 64-bit integers.
The NumberLong()
wrapper accepts the long as a string:
NumberLong("2090845886852")
The following examples use the NumberLong()
wrapper to write to the collection:
db.collection.insertOne( { _id: 10, calc: NumberLong("2090845886852") } )
db.collection.updateOne( { _id: 10 },
{ $set: { calc: NumberLong("2555555000000") } } )
db.collection.updateOne( { _id: 10 },
{ $inc: { calc: NumberLong(5) } } )
Retrieve the document to verify:
db.collection.findOne( { _id: 10 } )
In the returned document, the calc
field contains a NumberLong
object:
{ "_id" : 10, "calc" : NumberLong("2555555000005") }
If you use the $inc
to increment the value of a field that contains a NumberLong
object by a float, the data type changes to a floating point value, as in the following example:
Use
$inc
to increment thecalc
field by5
, which themongo
shell treats as a float:db.collection.updateOne( { _id: 10 },
{ $inc: { calc: 5 } } )Retrieve the updated document:
db.collection.findOne( { _id: 10 } )
In the updated document, the
calc
field contains a floating point value:{ "_id" : 10, "calc" : 2555555000010 }
NumberInt
The mongo
shell treats all numbers as floating-point values by default. The mongo
shell provides theNumberInt()
constructor to explicitly specify 32-bit integers.
NumberDecimal
New in version 3.4.
The mongo
shell treats all numbers as 64-bit floating-point double
values by default. The mongo
shell provides the NumberDecimal()
constructor to explicitly specify 128-bit decimal-based floating-point values capable of emulating decimal rounding with exact precision. This functionality is intended for applications that handle monetary data, such as financial, tax, and scientific computations.
The decimal
BSON type uses the IEEE 754 decimal128 floating-point numbering format which supports 34 decimal digits (i.e. significant digits) and an exponent range of −6143 to +6144.
The NumberDecimal()
constructor accepts the decimal
value as a string:
NumberDecimal("1000.55")
The value is stored in the database as follows:
NumberDecimal("1000.55")
The NumberDecimal()
constructor also accepts double
values from the mongo
shell (i.e. without quotes), although this is not recommended due to the risk of losing precision. The constructor creates a binary-baseddouble
precision representation of the decimal-based parameter (potentially losing precision), then converts that value to a decimal
value with a precision of 15 digits. The following example passes the value implicitly as a double
and shows how it is created with a precision of 15 digits:
NumberDecimal(1000.55)
The value is stored in the database as follows:
NumberDecimal("1000.55000000000")
The following example passes the value implicitly as a double
and shows how a loss of precision can occur:
NumberDecimal(9999999.4999999999)
The value is stored in the database as follows:
NumberDecimal("9999999.50000000")
NOTE
To use the decimal
data type with a MongoDB driver, be sure to use a driver version that supports it.
Equality and Sort Order
Values of the decimal
type are compared and sorted with other numeric types based on their actual numeric value. Numeric values of the binary-based double
type generally have approximate representations of decimal-based values and may not be exactly equal to their decimal
representations, so use theNumberDecimal()
constructor when checking the equality of decimal
values. Consider the following examples with the following documents in the numbers
collection:
{ "_id" : 1, "val" : NumberDecimal( "9.99" ), "description" : "Decimal" }
{ "_id" : 2, "val" : 9.99, "description" : "Double" }
{ "_id" : 3, "val" : 10, "description" : "Double" }
{ "_id" : 4, "val" : NumberLong(10), "description" : "Long" }
{ "_id" : 5, "val" : NumberDecimal( "10.0" ), "description" : "Decimal" }
When the queries from the table below are plugged into the db.numbers.find(<query>)
method, the following results are returned:
Query | Results |
---|---|
{ “val”: 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” }
|
The first query, { "val": 9.99 }
, implicitly searches for the double
representation of 9.99
which is not equal to the decimal
representation of the value.
The NumberDecimal()
constructor is used to query for the document with the decimal
representation of9.99
. Values of the double
type are excluded because they do not match the exact value of the decimal
representation of 9.99
.
Matching values of all numeric types are returned when querying for whole numbers. For example, querying for a double
representation of 10
will include a decimal
representation of 10.0
in the results and vice versa.
Checking for decimal
Type
To test for decimal
type, use the $type
operator with the string alias "decimal"
or 19
, the numeric code for the decimal
type.
db.inventory.find( { price: { $type: "decimal" } } )
Check Types in the mongo
Shell
To determine the type of fields, the mongo
shell provides the instanceof
and typeof
operators.
instanceof
instanceof
returns a boolean to test if a value is an instance of some type.
For example, the following operation tests whether the _id
field is an instance of type ObjectId
:
mydoc._id instanceof ObjectId
The operation returns true
.
typeof
typeof
returns the type of a field.
For example, the following operation returns the type of the _id
field:
typeof mydoc._id
In this case typeof
will return the more generic object
type rather than ObjectId
type.
4.Data Types in the mongo Shell-官方文档摘录的更多相关文章
- 2.Access the mongo Shell Help-官方文档摘录
总结: 1.使用help可以查看帮助信息db.help() help等 2.查看对应的实现方法.比如 test@gzxkvm52$ db.updateUser function (name, upd ...
- Cocos Creator 加载和切换场景(官方文档摘录)
Cocos Creator 加载和切换场景(官方文档摘录) 在 Cocos Creator 中,我们使用场景文件名( 可以不包含扩展名)来索引指代场景.并通过以下接口进行加载和切换操作: cc.dir ...
- MongoDB - The mongo Shell, Data Types in the mongo Shell
MongoDB BSON provides support for additional data types than JSON. Drivers provide native support fo ...
- ng的概念层次(官方文档摘录)
官方文档是这么说的: You write Angular applications by: composing HTML templates with Angularized markup, writ ...
- Cocos Creator 生命周期回调(官方文档摘录)
Cocos Creator 为组件脚本提供了生命周期的回调函数.用户通过定义特定的函数回调在特定的时期编写相关 脚本.目前提供给用户的声明周期回调函数有: onLoad start update la ...
- Cocos Creator 使用计时器(官方文档摘录)
在 Cocos Creator 中,我们为组件提供了方便的计时器,这个计时器源自于 Cocos2d-x 中的 cc.Scheduler,我们将它保留在了 Cocos Creator 中并适配了基于组件 ...
- angular 模板语法(官方文档摘录)
https://angular.cn/guide/template-syntax {{}} 和"" 如果嵌套,{{}}里面求完值,""就是原意 <h3&g ...
- Spring Data Commons 官方文档学习
Spring Data Commons 官方文档学习 -by LarryZeal Version 1.12.6.Release, 2017-07-27 为知笔记版本在这里,带格式. Table o ...
- Spring Framework 官方文档学习(四)之Validation、Data Binding、Type Conversion(一)
题外话:本篇是对之前那篇的重排版.并拆分成两篇,免得没了看的兴趣. 前言 在Spring Framework官方文档中,这三者是放到一起讲的,但没有解释为什么放到一起.大概是默认了读者都是有相关经验的 ...
随机推荐
- Codeforces Round #238 (Div. 2) D. Toy Sum
D. Toy Sum time limit per test:1 second memory limit per test:256 megabytes input:standard input o ...
- C/C++开发平时用的自定义debug函数
一.无颜色版 一.自定义printf #include <stdio.h> #ifdef MYDEBUG #define DEBUG(arg...) {\ printf("[de ...
- mysql之mysql、mysql-devel、mysql-server
一.引言 一直都没搞明白这三者之间的关系,于是决心查资料把这个问题搞明白,遂记录以便查阅.学习 二.关系 mysql-devel 开发用到的库以及包含文件mysql mysql 客户端mysql-se ...
- 绕过云盾找真实IP-找真实IP-绕过CDN
目标站:www.chinaparkview.cn 云盾挡着了 查一下历史IP 查出3月9号的IP是103.249.104.114 当然查出来的不一定准确 修改本地host文件 PS:不要加http 然 ...
- Google Analytics Overview - Google Analytics 概述
该文档讨论了如何开始使用Google Analytics SDK for Android v3. Before you Begin - 在开始之前 在开始实现SDK之前,请确保有下面的东东: 1. ...
- JavaScript绘图类 (DIV绘图)
主要的图形算法抄自一个叫w_jsGraphics.js的类库,第一次看到那个库的时候,感觉那是十分神奇的存在.不过估计现在那个库早就已经找不到了. 这是很早之前的一个DIV绘图类,那时候VML+SVG ...
- dubbo入门使用
主要参考dubbo官网demo 此处采用zookeeper注册中心进行服务协调管理 真个项目结构如下所示: dcommon : 主要用于定义服务接口, 为dconsumer,dprovider所依赖 ...
- [转]wordpress安装插件的3种方式
WordPress插件安装方法有几种?WordPress是一种使用PHP语言开发的博客平台,有些用户不知道怎么安装WordPress插件和主题的,所以今天小编就为大家介绍几种WordPress插件安装 ...
- 控件禁用与启easyui用
1.validatebox可以用的用法:前两种适用于单个的validatebox;第三种应用于整个form里面的输入框; <1>.$("#id").attr(" ...
- kafka 安装步骤
kafka安装文档 1.解压缩(官网下载:http://kafka.apache.org/downloads.html) tar -xzf kafka_2.10-0.8.2.0.tgz cd kafk ...