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——数据类型详解相关推荐

  1. redis 数据类型详解 以及 redis适用场景场合

    redis 数据类型详解 以及 redis适用场景场合 1. MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访 ...

  2. MongoDb数据结构详解

    MongoDb数据结构详解 ⾸先,向数据库插⼊⼀条bjson数据 ⾸先是定义⽂档,然后使⽤admin⽤户名密码登录,进⼊test数据库,向test数据库中插⼊此⽂档("表名称和表中的记录&q ...

  3. SQL Server 2005 常用数据类型详解

    SQL Server 2005 常用数据类型详解 [b]1. 字符串数据类型[/b] char 此数据类型可存储1~8000个定长字符串,字符串长度在创建时指定:如未指定,默认为char(1).每个字 ...

  4. 为什么要设定PHP数据类型,php数据类型详解

    php数据类型详解 PHP 支持8种基本的数据类型. 四种标量类型: boolean (布尔型)integer (整型)float (浮点型, 也称作 double)string (字符串) 两种复合 ...

  5. (02)System Verilog logic数据类型详解

    (02)System Verilog logic数据类型详解 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog logic数据类型详解 ...

  6. (03)System Verilog 常用数据类型详解

    (03)System Verilog 常用数据类型详解 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog 常用数据类型详解 5)结语 1 ...

  7. Python中的list/tuple/dict/set数据类型详解

    Python中的list/tuple/dict/set数据类型详解 Python内部内置了一些数据类型与结构,可以方便在编程时候的使用. list List存储一系列的有序集合,并且元素内容可变(可更 ...

  8. Redis数据类型详解(五种)

    Redis支持五种数据类型,即string(字符串).hash(哈希).list(列表).set(集合)及zset(sorted set:有序集合),云吞铺子分享Redis数据类型谅解: Redis数 ...

  9. 开课吧课堂:C++基本数据类型详解

    一般来说在学习C++开发技术的时候,C++数据类型是必然需要了解和学习的,同时也是一名C++开发工程师所需要深入了解的.接下来小编带你一起了解下C++基本数据类型: C++基本数据类型详解 说明符(s ...

最新文章

  1. BAT七年经验,却抵不过外企面试的两道算法题?
  2. 一、Windows Server 2016 AD服务器搭建
  3. Linux内核链表深度分析【转】
  4. libevent源码学习----io多路复用的封装和使用
  5. 牛客题霸 [ 在二叉树中找到两个节点的最近公共祖先] C++题解/答案
  6. springboot entity date_SpringBoot+JWT实战(附源码)
  7. 计算机应用基础文字处理软件应用职高PPT,《计算机应用基础》职高2010修订版_教(学)案...
  8. 微软高层人士变动!张祺晋升为微软公司全球资深副总裁
  9. html中让图片放大的代码,HTML5图片预览 放大(示例代码)
  10. 自我管理--做事要有明确的时间观念
  11. 智能指针的标准之争:Boost vs. Loki (转载)
  12. Java文字转语音功能实现
  13. 【ice】飞冰快速上手笔记
  14. **2019年java最新手机号正则**
  15. 【文献阅读】Remote Power Attacks on the Versatile Tensor Accelerator in Multi-Tenant FPGAs
  16. elasticsearch7.9安装[单集群单节点、开启权限认证]
  17. python有什么好玩的库_python有什么好玩的库
  18. 合肥超导量子计算机,美国研发超导量子计算机所用的变光转换器
  19. 程序人生 | (8) 好的研究想法从哪里来
  20. 民用航空器的机型介绍(波音737系列)

热门文章

  1. loadrunner入门教程(11)--回放脚本
  2. 一个简单的shell脚本--判断网段主机IP存活情况
  3. 电灯泡实验应该怎么做_物理小实验 教你测量小灯泡的电功率的方法
  4. TS装饰器、混入Mixins、TS模块、命名空间
  5. 2020年郑州大学计算机录取分数线,2020年郑州大学各省各专业录取分数线
  6. 第五届百度西安交大大数据竞赛总结
  7. zookeeper配置文件zoo.cfg详细讲解
  8. C++文件操作Read函数
  9. 《深入学习VMware vSphere 6》——1.2 虚拟化应用概述
  10. Wave Driver介绍-7(驱动中对音量的控制操作-非硬件音量控制)