《MongoDB入门教程》 - MongoDB基础介绍

前言

时间也过太快了嘛,一晃上次更新都又过去6个月了,再不更新就变成年更博客了。
对了,第一次疫情也过去了,最近开始二阳了,希望大家能继续挺过去吧
本篇文章初尝试使用ChatGPT进行,博主主要负责排版和总结

引用文章

  • 《MongoDB权威指南》

一、简介

1.1什么是MongoDB

chatGPT: MongoDB是一种开源的文档型数据库管理系统,它以高度可扩展性、灵活性和性能而闻名。MongoDB采用了NoSQL(非关系型数据库)的设计理念,以面向文档的方式存储数据

MongoDB中所有的核心设计都是围绕着【高度可扩展性、灵活性和性能】来进行

1.2优势

1.2.1文档存储:

MongoDB使用BSON(二进制JSON)格式存储数据,支持嵌套文档和数组。使用了“文档”来代替“行” 的概念,没有预定义模式,文档中的键值对大小和内容没有进行固定,可以进行快速迭代

1.2.2可拓展性:

MongoDB具有良好的横向扩展性,可通过添加更多服务器节点处理更大的数据量和负载。由于MongoDB是面向文档的数据模型使跨多台服务器拆分数据更加容易。MongoDB 会自动平衡跨集群的数据和负载,自动重新分配文档,并将读写操作路由到正确的机器上

如果想增加存储空间或增加读写操作的吞吐量,那么可以购买额外的服务器,并将它们添加到集群中。这既便宜又便于扩展,但管理 1000 台机器比管理 1 台机器困难得多。

在这里插入图片描述

1.2.3高性能:

MongoDB使用内存映射技术,将数据存储在内存中,提供快速的读取和写入操作。其中WiredTiger 存储引擎
中使用了机会锁

1.2.4其他优势

  • 强大的查询功能:MongoDB支持灵活的文档查询、范围查询、排序、聚合和地理空间查询等。
  • 复制和容错:MongoDB支持数据复制和容错机制,配置多个副本集以确保数据的高可用性和可靠性。
  • 分片:MongoDB可将数据分散存储在多个服务器上,实现数据的水平切分,提高系统的扩展性和负载均衡能力。
  • 自动分片迁移:MongoDB具备自动分片迁移功能,可在数据量增加或减少时自动调整分片的位置和数据分布。

1.3使用场景

  • 处理大量非结构化数据的项目。
  • 强调灵活性和可扩展性的项目。
  • 大数据分析。
  • 实时数据处理。
  • 内容管理系统。
  • 社交网络应用。
  • 日志管理等。

二、核心概念

2.1文档(核心中的核心)

文档是 MongoDB 中的基本数据单元,可以粗略地认为其相当于关系数据库管理系统中的行(但表达力要强得多)

文档是由一组**有序的键值对(类似于 JSON)**集合组成,通常包含一个或多个键值对,如:

{"greeting" : "Hello, world!", "views" : 3}

其中是字符串类型。除了少数例外的情况,可以使用任意 UTF-8 字符作为键。


注意:

  1. 在同个文档中不能包含相同的键
  2. MongoDB 会区分类型和大小写,见下面描述
类型不同,所以下述是两个文档
{"count" : 5}
{"count" : "5"}
=========================
大小写不同,所以下述是两个文档
{"count" : 5}
{"Count" : 5}

2.2集合

集合就是一组文档。如果将文档比作关系数据库中的行,那么一个集合就相当于一张表。

集合具有动态模式的特性。这意味着文档可以在同一个集合中存储不同结构的文档,如:

{"greeting" : "Hello, world!", "views": 3}
{"signoff": "Good night, and good luck"}

2.2.1那为什么需要多个集合?

  1. 数据分离:当你的应用程序需要处理具有不同结构或不同用途的数据时,将其分开存储在不同的集合中可以更好地组织数据。这样做可以提高查询效率,并使数据模型更加清晰和易于管理。

  2. 安全性和权限控制:使用多个集合可以更好地控制对数据的访问权限。你可以为每个集合设置不同的权限和安全策略,以确保只有特定用户或角色可以访问特定集合中的数据。

  3. 性能优化:当数据集增长到巨大规模时,查询和索引操作可能会变得更加复杂和耗时。通过将数据分散到多个集合中,可以更好地利用硬件资源和并行处理能力,提高数据库的性能和响应速度。

  4. 数据生命周期管理:在一些应用中,数据的生命周期可能会有不同的阶段,例如原始数据、处理数据、归档数据等。通过使用多个集合,可以更好地管理数据的生命周期,并根据需要进行数据迁移和清理。

  5. 跨多租户应用:如果你的应用是一个多租户应用,即为多个独立的客户提供服务,使用多个集合可以帮助实现数据的逻辑隔离,每个客户拥有自己独立的数据集合,以确保数据的安全性和隐私。

2.3数据库

MongoDB 使用集合对文档进行分组,使用数据库对集合进行分组。一个 MongoDB 实例可以承载多个数据库,每个数据库有零个或多个集合。
一般来说:将单个应用程序的所有数据都存储在同一个数据库中

2.4数据类型

字符串:用于存储文本数据,最长可以达到16MB。

数值:包括整数和浮点数。整数可以是32位或64位,而浮点数可以是单精度(32位)或双精度(64位)。

布尔值:用于表示真或假。

日期时间:表示日期和时间,以毫秒为单位存储自Unix纪元以来的时间戳。

Null值:表示空值或缺失值。

数组:表示一组有序值的列表。

内嵌文档:表示嵌套在文档中的另一个文档,可以嵌套多层。

二进制数据:用于存储二进制数据,如图像、视频和声音等。

除此之外,MongoDB还支持特殊数据类型,如ObjectId类型,它是一个12字节的唯一标识符,通常用于文档的_id字段。还有正则表达式类型,用于存储正则表达式,以及JavaScript代码类型,用于在MongoDB服务器端执行JavaScript代码。

2.4.1特殊说明

数组
MongoDB可以对数组进行查询并使用其内容创建索引,还允许使用原子更新来修改数组的内容。

内嵌文档
可以使数据组织的方式更加自然,而不仅仅是键 – 值对这样的扁平结构,如

{
 "name" : "John Doe",
 "address" : {
 "street" : "123 Park Street",
 "city" : "Anytown",
 "state" : "NY"
 }
}

与数组一样,MongoDB“理解”内嵌文档的结构,并能够在其中创建索引、执行查询或进行更新。
ObjectId和_id:
每个文档都必须有一个唯一的 “_id” 键。“_id” 的值可以是任何类型,但其默认为 ObjectId。
ObjectId 占用了 12 字节的存储空间,组成方式如下
在这里插入图片描述
其中值得注意的是:ObjectId值包含时间戳信息,因此可以按照生成时间的先后顺序进行排序。这在一些应用场景中非常有用,例如按时间查询文档或获取最新的文档。

三、小结

本篇文章主要介绍了MongoDB的一些优势特点和一些核心概念和术语,我们将在后续进行学习MongoDB的CRUD操作

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于 MongoDB 的入门,你可以按照以下步骤进行学习: 1. 下载并安装 MongoDB:在 MongoDB 的官方网站上下载适合你操作系统的安装程序,并按照提示进行安装。 2. 启动 MongoDB 服务:安装完成后,启动 MongoDB 服务。在 Windows 上,你可以通过运行 `mongod` 命令启动服务。在 macOS 或 Linux 上,可以打开终端并运行 `mongod` 命令。默认情况下,MongoDB 会在本地的 27017 端口上启动。 3. 连接到 MongoDB:在另一个终端窗口或命令提示符中,使用 `mongo` 命令连接到 MongoDB。默认情况下,它会连接到本地的 MongoDB 服务器。 4. 创建数据库:在 `mongo` shell 中,可以使用 `use <database_name>` 命令创建一个新数据库,例如 `use mydb`。 5. 创建集合(表):集合类似于关系数据库中的表。你可以使用 `db.createCollection("<collection_name>")` 命令创建一个新集合,例如 `db.createCollection("mycollection")`。 6. 插入数据:使用 `db.<collection_name>.insertOne(<document>)` 命令将数据插入到集合中。例如,`db.mycollection.insertOne({ name: "John", age: 30 })`。 7. 查询数据:使用 `db.<collection_name>.find()` 命令查询集合中的所有数据。例如,`db.mycollection.find()`。 8. 更新数据:使用 `db.<collection_name>.updateOne(<filter>, <update>)` 命令更新集合中的数据。例如,`db.mycollection.updateOne({ name: "John" }, { $set: { age: 35 } })`。 9. 删除数据:使用 `db.<collection_name>.deleteOne(<filter>)` 命令删除集合中的数据。例如,`db.mycollection.deleteOne({ name: "John" })`。 这是一个 MongoDB 入门的基本流程。你可以根据需要进一步学习和探索 MongoDB 的更多功能和用法。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值