1 简介
MongoDB是一个开源、高性能、无模式的文档型数据库,当初的设计就是用于简化开发和方便扩展,是NoSQL数据库产品中的一种最像关系型数据库(MySQL)的非关系型数据库。它支持的数据结构非常松散,是一种类似于 JSON 的 格式叫BSON,所以它既可以存储比较复杂的数据类型,又相当的灵活。MongoDB中的记录是一个文档,它是一个由字段和值对(field:value)组成的数据结构。MongoDB文档类似于JSON对象,即一个文档认为就是一个对象。字段的数据类型是字符型,,它的值除了使用基本的一些类型外,还可以包括其他文档,普通数组和文档数组.
1.1 适用场景
1.2 对比MySQL
1.4 安装
这里使用docker部署mongoDB和可视化工具
2 基本操作
2.1 数据库
在MongoDB中,有三个初始数据库,它们是admin、local和config。这三个数据库在MongoDB的架构和管理中具有特殊的作用。
2.2 集合
在MongoDB中,集合(Collection)是一组文档(Document)的无序集合,类似于关系型数据库中的表。
2.3 文档
在MongoDB中,文档是数据存储的基本单位。它是一个由字段和值组成的数据结构,类似于关系型数据库中的一行记录。MongoDB中的文档采用 BSON(Binary JSON)格式,这是一种二进制编码的 JSON 表示形式。
一个MongoDB文档是一个包含键值对的有序集合,每个键值对表示文档的一个字段和对应的值。文档的字段可以包含各种数据类型,包括字符串、数字、布尔值、数组、嵌套的文档等。
2.3.1 数据类型
MongoDB支持多种数据类型,这些数据类型可用于定义文档中的字段值。以下是MongoDB中常见的数据类型:
2.3.1 C
使用或方法将文档插入集合。若集合不存在会自动创建,即隐式创建。
2.3.1 R
MongoDB支持丰富的条件查询语法,允许你执行各种高级查询。以下是一些MongoDB条件查询的高级用法:
在MongoDB中,投影查询用于指定查询结果中所包含的字段。通过投影,你可以选择只检索文档中的特定字段,而不是整个文档。
投影查询还支持嵌套文档。例如,如果文档中有一个嵌套的地址字段,你可以通过指定嵌套字段来进行投影。
2.3.1 U
基本操作符
还有很多更新操作符。https://www.mongodb.com/docs/manual/reference/operator/update/
要替换除_id字段之外的文档的全部内容,可以使用replaceOne(),替换文档可以具有与原始文档不同的字段。在替换文档中,可以省略_id字段,因为_id字段是不可变的;但是,如果包含id字段,则该字段的值必须与当前值相同。
2.3.1 D
使用或方法删除集合中的文档。
3 索引
MongoDB使用B树(或B-树)来实现索引。
3.1 索引分类
用于全文本搜索,只能用于包含文本字段的集合。
用于自动删除在指定时间后过期的文档。
该语句将为 createdAt 字段建立 TTL 索引,可以自动删除过期数据。TTL 索引会根据 expireAt 字段的值自动删除过期数据,可以用于数据清理等应用场景。
针对属性包含数组数据的情况,MongoDB支持针对数组中每一个element创建索引,Multikey indexes支持strings,numbers和nested documents。
该语句将为 tags 字段建立多键索引,可以加速查询包含指定标签的文档。多键索引会为数组中的每个元素建立一个索引,可以加速数组元素的查询。
地理空间索引是针对地理位置信息建立的索引,可以支持地理位置查询
稀疏索引是 MongoDB 中的一种索引类型,用于对集合中某个字段的值进行索引,但仅包含具有该字段的文档。与普通索引不同,稀疏索引不会包含那些不包含指定字段的文档。
这将在 字段上创建一个稀疏索引,只包含那些包含 字段的文档。稀疏索引对于只有一小部分文档包含某个字段值的情况非常有用,可以节省索引空间并提高查询性能。
确保索引字段的值在整个集合中是唯一的。
3.2 索引管理
MongoDB 在创建集合的过程中, 在 字段上创建一个唯一的索引, 默认名字为 ,该索引可防止客户端插入两个具有相同值的文档 , 不能在 字段上删除此索引。
注意:该索引是唯一索引, 因此值不能重复, 即 值不能重复的
使用 方法删除指定索引。若要删除所有索引(除了默认的 索引,_id的索引是无法删除的),可以使用 方法。
3.3 性能分析
options
stage所有类型如下:
COLLSCAN:全表扫描
IXSCAN:索引扫描
FETCH:根据索引去检索指定document
SHARD_MERGE:将各个分片返回数据进行merge
SORT:表明在内存中进行了排序
LIMIT:使用limit限制返回数
SKIP:使用skip进行跳过
IDHACK:针对_id进行查询
SHARDING_FILTER:通过mongos对分片数据进行查询
COUNT:利用db.coll.explain().count()之类进行count运算
TEXT:使用全文索引进行查询时候的stage返回
PROJECTION:限定返回字段时候stage的返回
优秀stage的组合(查询的时候尽可能用上索引):
Fetch+IDHACK
Fetch+IXSCAN
Limit+(Fetch+IXSCAN)
PROJECTION+IXSCAN
SHARDING_FITER+IXSCAN
需要优化的组合:
COLLSCAN(全表扫描)
SORT(使用sort但是无index)
COUNT 不使用index进行count)
3.4 覆盖查询
覆盖查询(Covered Query)是一种查询优化技术,通过使用索引,可以使查询在索引中找到所有所需的字段,而无需回到集合中去检索文档。这可以提高查询性能,因为不需要额外的磁盘 I/O 来获取文档数据,而是直接从索引中获取所需的信息。
覆盖查询的关键是确保查询条件和投影字段都可以通过索引满足。具体来说:
在这个查询中,查询条件是 ,这个条件可以通过 索引直接匹配。投影字段是 ,这些字段也可以从索引中直接获取。因此,这是一个覆盖查询,不需要回到集合中检索文档数据。
https://zhuanlan.zhihu.com/p/?utm_id=0
https://blog.csdn.net/weixin_/article/details/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/156092.html