MongoDB——数据类型详解
MongoDB在保留JSON基本键/值对特性的基础上,添加了其他一些数据类型。在不同的编程语言下,这些类型的确切表示有些许差异。
基本类型
- null:用于表示空值或者不存在的字段
{"x":null}
- 布尔型:布尔类型有两个值true和false
{"x":true}
- 数值:shell默认使用64位浮点型数值。因此,以下数值在shell中shell中是很"正常"的:
{"x":3.14}
或
{"x":3}
对于整数值,可使用NumberInt类或NumberLong类:
{"x":NumberInt("3")}
{"x":NumberLong("3")}
- 字符串:UTF-8字符串都可表示为字符串数据类型
{"x":"foobar"}
- 日期:日期被存储为自新纪元以来经过的毫秒数,不存储时区
{"x":new Date()}
- 正则表达式:查询时,使用正则表达式作为限定条件,语法也与JavaScript的正则表达式语法相同
{"x":/foobar/i}
- 数组:数据列表或数据集可以表示为数组
{"x":["a","b","c"]}
- 内嵌文档:文档可嵌套其他文档,被嵌套的文档作为父文档的值
{"x":{"foo":"bar"}}
- 对象id:对象id是一个12个字节的ID,是文档的唯一标识
{"x":ObjectId()}
二进制数据:二进制数据是一个任意字节的字符串。它不能直接在shell中使用。如果要将非UTF-8字符保存到数据库中,二进制数据是唯一的方式
代码:查询和文档中可以包括任意JavaScript代码
{"x":function(){ /* ... */}}
数组
数组是一组值,它即能作为有序对象(如列表、栈或队列),也能作为无序对象(如数据集)来操作。
{"things":["pie, 3.14]}
数组可包含不同数据类型的元素。实际上,常规的键值对对支持的所有值都可以作为数组的值,数组中甚至可以嵌套数组。
内嵌文档
文档可以作为键的值,这样的文档就是内嵌文档。
{"name":"John Doe","address":{"streect":"123 Park Street","city":"Anytown","state":"NY"}
}
_id和ObjectId
MongoDB中存储的文档必须有一个"_id"键。这个键的值可以是任何类型,默认是个ObjectId对象。在一个集合里面,每个文档都有唯一的"_id",确保集合里面每个文档都能被唯一标识。如果有两个集合的话,两个集合可以都有一个"_id"的值为123,但是每个集合里面只能有一个文档的"_id"值为123.
ObjectId:
ObjectId是"_id"的默认类型。它设计成轻量型的,不同的机器都能用全局唯一的同种方法生成它。
ObjectId使用12字节的存储空间,是一个由24个16进制数字组成的字符串。
生成方式:0|1|2|3|4|5|6|7|8|9|10|11
时间戳 |机器 |PID|计数器
- ObjectId的前4个字节是从标准纪元开始的时间戳,单位为秒。
- 接下来的3个字节是所在主机的唯一标识符,通常是机器主机名的散列值(hash)。这样就可以确保不同主机生成不同的ObjectId。
- 接下来的2个字节来自产生ObjectId的进城的进程标识符(PID)
前9个字节保证了同一秒种不同机器不同进程产生的ObjectId是唯一的。最后3个字节是一个自动关增加的计数器,确保相同进城同一秒长生的ObjectId也是不一样的。
一秒钟最多允许每个进程拥有2563(1677215)个不同的ObjectId
。
MongoDB——数据类型详解相关推荐
- redis 数据类型详解 以及 redis适用场景场合
redis 数据类型详解 以及 redis适用场景场合 1. MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访 ...
- MongoDb数据结构详解
MongoDb数据结构详解 ⾸先,向数据库插⼊⼀条bjson数据 ⾸先是定义⽂档,然后使⽤admin⽤户名密码登录,进⼊test数据库,向test数据库中插⼊此⽂档("表名称和表中的记录&q ...
- SQL Server 2005 常用数据类型详解
SQL Server 2005 常用数据类型详解 [b]1. 字符串数据类型[/b] char 此数据类型可存储1~8000个定长字符串,字符串长度在创建时指定:如未指定,默认为char(1).每个字 ...
- 为什么要设定PHP数据类型,php数据类型详解
php数据类型详解 PHP 支持8种基本的数据类型. 四种标量类型: boolean (布尔型)integer (整型)float (浮点型, 也称作 double)string (字符串) 两种复合 ...
- (02)System Verilog logic数据类型详解
(02)System Verilog logic数据类型详解 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog logic数据类型详解 ...
- (03)System Verilog 常用数据类型详解
(03)System Verilog 常用数据类型详解 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog 常用数据类型详解 5)结语 1 ...
- Python中的list/tuple/dict/set数据类型详解
Python中的list/tuple/dict/set数据类型详解 Python内部内置了一些数据类型与结构,可以方便在编程时候的使用. list List存储一系列的有序集合,并且元素内容可变(可更 ...
- Redis数据类型详解(五种)
Redis支持五种数据类型,即string(字符串).hash(哈希).list(列表).set(集合)及zset(sorted set:有序集合),云吞铺子分享Redis数据类型谅解: Redis数 ...
- 开课吧课堂:C++基本数据类型详解
一般来说在学习C++开发技术的时候,C++数据类型是必然需要了解和学习的,同时也是一名C++开发工程师所需要深入了解的.接下来小编带你一起了解下C++基本数据类型: C++基本数据类型详解 说明符(s ...
最新文章
- BAT七年经验,却抵不过外企面试的两道算法题?
- 一、Windows Server 2016 AD服务器搭建
- Linux内核链表深度分析【转】
- libevent源码学习----io多路复用的封装和使用
- 牛客题霸 [	在二叉树中找到两个节点的最近公共祖先] C++题解/答案
- springboot entity date_SpringBoot+JWT实战(附源码)
- 计算机应用基础文字处理软件应用职高PPT,《计算机应用基础》职高2010修订版_教(学)案...
- 微软高层人士变动!张祺晋升为微软公司全球资深副总裁
- html中让图片放大的代码,HTML5图片预览 放大(示例代码)
- 自我管理--做事要有明确的时间观念
- 智能指针的标准之争:Boost vs. Loki (转载)
- Java文字转语音功能实现
- 【ice】飞冰快速上手笔记
- **2019年java最新手机号正则**
- 【文献阅读】Remote Power Attacks on the Versatile Tensor Accelerator in Multi-Tenant FPGAs
- elasticsearch7.9安装[单集群单节点、开启权限认证]
- python有什么好玩的库_python有什么好玩的库
- 合肥超导量子计算机,美国研发超导量子计算机所用的变光转换器
- 程序人生 | (8) 好的研究想法从哪里来
- 民用航空器的机型介绍(波音737系列)
热门文章
- loadrunner入门教程(11)--回放脚本
- 一个简单的shell脚本--判断网段主机IP存活情况
- 电灯泡实验应该怎么做_物理小实验 教你测量小灯泡的电功率的方法
- TS装饰器、混入Mixins、TS模块、命名空间
- 2020年郑州大学计算机录取分数线,2020年郑州大学各省各专业录取分数线
- 第五届百度西安交大大数据竞赛总结
- zookeeper配置文件zoo.cfg详细讲解
- C++文件操作Read函数
- 《深入学习VMware vSphere 6》——1.2 虚拟化应用概述
- Wave Driver介绍-7(驱动中对音量的控制操作-非硬件音量控制)