MongoDB 的基本概念

embedded/2025/2/14 3:16:48/

一、数据库(Database)

数据库是 MongoDB 中最高层次的概念,是一个存储数据的逻辑容器,它可以包含多个集合。一个 MongoDB 实例可以管理多个数据库,每个数据库都有自己独立的权限和存储空间。可以使用`use`命令在 Mongo Shell 中切换或创建数据库

二、集合(Collection)

集合类似于关系型数据库中的表,是一组文档的容器。集合中的文档可以有不同的结构,不需要像关系型数据库那样定义严格的表结构。

三、文档(Document)

文档是 MongoDB 中数据的基本单元,相当于关系型数据库中的一行记录。文档以键值对的形式存储数据,键是字符串,值可以是各种数据类型,如字符串、数字、数组、对象等。

{"_id": "123456","name": "John Doe","age": 30,"hobbies": ["reading", "coding"]}

`_id`字段是文档的唯一标识符,默认情况下会自动生成,也可以在插入文档时自定义。

四、字段(Field)

字段是文档中的键值对中的键,用于标识和存储特定的数据。每个字段都有一个名称和对应的值,字段的值可以是任何合法的 MongoDB 数据类型。在上面的文档示例中,`name`、`age`和`hobbies`都是字段。

五、数据类型

字符串(String):用于存储文本数据,必须使用双引号或单引号包裹。

数字(Number):支持整数和浮点数,如`3`、`3.14`等。

日期(Date):用于存储日期和时间信息,使用`new Date()`创建。

数组(Array):可以存储多个值的有序集合,如`["apple", "banana", "cherry"]`。

对象(Object):用于存储复杂的嵌套数据结构,如`{"address": {"street": "123 Main St", "city": "Anytown"}}`。

布尔值(Boolean):取值为`true`或`false`。

六、索引(Index)

索引用于提高数据库的查询效率,类似于书籍的目录。在 MongoDB 中,可以为集合中的一个或多个字段创建索引。通过索引,MongoDB 可以更快地定位和查询数据,特别是在处理大量数据时,能显著提高查询性能。可以使用`db.collection.createIndex({ field: 1 })`命令创建索引,其中`field`是要创建索引的字段名,`1`表示升序索引,`-1`表示降序索引。

七、游标(Cursor)

游标是 MongoDB 在查询操作时返回结果的一种数据结构,它指向查询结果集的当前位置。通过游标,可以逐个遍历查询结果中的文档。在 Mongo Shell 中,查询操作通常会返回一个游标,例如`var cursor = db.users.find()`,可以使用`cursor.hasNext()`方法判断是否还有下一个文档,使用`cursor.next()`方法获取下一个文档。

八、副本集(Replica Set)

副本集是由多个 MongoDB 节点组成的集群,其中包含一个主节点(Primary)和多个从节点(Secondary)。主节点负责处理所有的写操作和大部分读操作,从节点则从主节点复制数据,以提供数据冗余和高可用性。当主节点出现故障时,副本集会自动进行选举,将一个从节点提升为主节点,保证系统的正常运行。

九、分片(Sharding)

分片是将大型数据集分散存储在多个服务器(分片)上的技术,用于解决单机存储和处理能力的限制。通过分片,可以将数据水平分割到不同的节点上,每个节点只负责存储和处理一部分数据,从而提高系统的可扩展性和性能。

十、存储引擎(Storage Engine)

存储引擎负责管理 MongoDB 的数据存储和读写操作。MongoDB 支持多种存储引擎,如 WiredTiger、In-Memory 等。不同的存储引擎具有不同的特点和性能优势,例如 WiredTiger 存储引擎提供了高效的存储和并发读写能力,支持文档级别的并发控制,而 In-Memory 存储引擎则将数据完全存储在内存中,适用于对读写速度要求极高且数据量相对较小的场景。


http://www.ppmy.cn/embedded/162039.html

相关文章

23种设计模式的定义和应用场景-C#代码-汇总

23种设计模式的定义和应用场景: 1. 创建型模式(共5种) 单例模式(Singleton)、工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者模式(…

蓝桥杯试题:冒泡排序 选择排序

一、问题描述 在一个神秘的岛屿上,有一支探险队发现了一批宝藏,这批宝藏是以整数数组的形式存在的。每个宝藏上都标有一个数字,代表了其珍贵程度。然而,由于某种神奇的力量,这批宝藏的顺序被打乱了,探险队…

【开源免费】基于SpringBoot+Vue.JS公寓报修管理系统(JAVA毕业设计)

本文项目编号 T 186 ,文末自助获取源码 \color{red}{T186,文末自助获取源码} T186,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

使用Python爬虫获取1688工厂档案信息:深入解析

一、引言 在电商采购和供应链管理中,了解供应商的工厂信息是至关重要的一步。1688作为国内领先的B2B平台,提供了丰富的供应商和工厂档案信息。通过item_get_factory API接口,开发者可以获取工厂的详细信息,包括工厂名称、地址、联…

使用Python爬虫获取1688 App原数据API接口

一、引言 在电商领域,数据是企业决策、市场分析和产品优化的关键要素。1688作为国内领先的B2B电商平台,汇聚了海量的商品信息和交易数据。通过获取1688 App的原数据API接口,企业可以精准把握市场动态,了解竞争对手的策略&#xf…

C++病毒(^_^|)(2)

第二期 声明&#xff1a; 仅供损害电脑&#xff0c;不得用于非法。损坏电脑&#xff0c;作者一律不负责。此作为作者原创&#xff0c;转载请经过同意。 直接上代码 #include <bits/stdc.h> #include <windows.h> using namespace std; HHOOK g_hHook;void lrud(…

Kotlin 2.1.0 入门教程(十六)属性、getter、setter、幕后字段、后备属性、编译时常量、延迟初始化

属性声明 属性可以使用 var 关键字声明为可变的&#xff0c;也可以使用 val 关键字声明为只读的。 class Address {var name: String "Holmes, Sherlock"var street: String "Baker"var city: String "London"var state: String? nullvar…

Docker 容器使用

一、Docker 客户端 docker 客户端非常简单 ,我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项。 docker 可以通过命令 docker command --help 更深入的了解指定的 Docker 命令使用方法。 例如我们要查看 docker stats 指令的具体使用方法&#xff1a; do…