MongoDB数据模型

简介: MongoDB以文档为最小存储单位,采用BSON格式存储数据。BSON是类JSON的二进制形式,支持字符串、数组、对象及Date、ObjectId等特殊类型,兼具灵活性与高效性,适用于结构化与非结构化数据存储。

MongoDB的最小存储单位就是文档(document)对象。文档(document)对象对应于关系型数据库的行。数据在MongoDB中以BSON(Binary-JSON)文档的格式存储在磁盘上。

BSON(Binary Serialized Document Format)是一种类json的一种二进制形式的存储格式,简称Binary JSON。BSON和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型。 BSON采用了类似于 C 语言结构体的名称、对表示方法,支持内嵌的文档对象和数组对象,具有轻量性、可遍历性、高效性的三个特点,可以有效描述非结构化数据和结构化数据。这种格式的优点是灵活性高,但它的缺点是空间利用率不是很理想。

Bson中,除了基本的JSON类型:string,integer,boolean,double,null,array和object,mongo还使用了特殊的数据类型。这些类型包括 date,object id,binary data,regular expression 和code。每一个驱动都以特定语言的方式实现了这些类型,查看你的驱动的文档来获取详细信息。

BSON数据类型参考列表:

数据类型

描述

举例

字符串

UTF-8字符串都可表示为字符串类型的数据

{"x" : "foobar"}

对象id

对象id是文档的12字节的唯一ID

{"X" :ObjectId() }

布尔值

真或者假:true或者false

{"x":true}+

数组

值的集合或者列表可以表示成数组

{"x" : ["a", "b", "c"]}

32位整数

类型不可用。JavaScript仅支持64位浮点数,所以32位整数会被自动转换。

shell是不支持该类型的,shell中默认会转换成64位浮点数

64位整数

不支持这个类型。shell会使用一个特殊的内嵌文档来显示64位整数

shell是不支持该类型的,shell中默认会转换成64位浮点数

64位浮点数

shell中的数字就是这一种类型

{"x":3.14159,"y":3}

null

表示空值或者未定义的对象

{"x":null}

undefined

文档中也可以使用未定义类型

{"x":undefined}

符号

shell不支持,shell会将数据库中的符号类型的数据自动转换成字符串


正则表达式

文档中可以包含正则表达式,采用JavaScript的正则表达式语法

{"x" : /foobar/i}

代码

文档中还可以包含JavaScript代码

{"x" : function() { /* …… */ }}

二进制数据

二进制数据可以由任意字节的串组成,不过shell中无法使用


相关文章
|
缓存 JavaScript 前端开发
深入理解 ECMAScript modules:提升你的 JavaScript 技能(五)
深入理解 ECMAScript modules:提升你的 JavaScript 技能(五)
|
6月前
|
存储 安全
3.OAuth2.0四种授权模式
本文详解OAuth2授权码模式流程:A服务客户端通过B服务认证服务,经用户授权获取授权码,再换取访问令牌,从而安全调用B服务资源。该模式安全性高,广泛应用于第三方登录场景。
3.OAuth2.0四种授权模式
|
6月前
|
SQL 监控 安全
生产环境发布管理:从开发到上线的全链路保障
本文详解大型互联网团队的四环境发布体系(DEV→TEST→PRE→PROD),阐述如何通过标准化流程与自动化平台实现安全、高效、可追溯的生产发布,涵盖环境职责、CI/CD核心能力及风险应对策略,助力团队实现快速迭代与零重大故障。
|
6月前
|
Java
ArrayList 的扩容机制解析
ArrayList扩容机制解析:添加元素时先检查容量,不足则触发扩容。默认初始容量为10,每次扩容1.5倍,通过数组拷贝实现,耗时O(n)。频繁扩容影响性能,建议预估容量并初始化指定大小,提升效率。
|
监控 网络协议 安全
中间人公鸡之ARP欺骗
中间人公鸡之ARP欺骗
|
自然语言处理 BI 数据处理
自然语言处理 Paddle NLP - 基于预训练模型完成实体关系抽取
自然语言处理 Paddle NLP - 基于预训练模型完成实体关系抽取
647 1
|
机器学习/深度学习 运维 监控
信息安全:入侵检测技术原理与应用.(IDS)
信息安全:入侵检测技术原理与应用.(IDS)
1537 1
|
机器学习/深度学习 算法 数据处理
深度学习500问——Chapter03:深度学习基础(3)
深度学习500问——Chapter03:深度学习基础(3)
842 1
|
存储 Dart 前端开发
为什么说 Compose 的声明式代码最简洁 ?Compose/React/Flutter/SwiftUI 语法对比
为什么说 Compose 的声明式代码最简洁 ?Compose/React/Flutter/SwiftUI 语法对比
766 1
|
Linux 测试技术 网络安全
覆盖libc.so.6的惨痛教训
发生时间: 2022年11月28日08:55:20 偷了个懒,在安装tmux的时候直接从别的服务器上copy二进制文件,而且是跨OS 版本的。缺少一些lib库文件,直接从安装好的机器上copy过来。然后系统就崩了。惨痛的教训.
1418 0

热门文章

最新文章