MongoDB

MongoDB 知识量:13 - 42 - 129

1.2 MongoDB的基本概念><

文档- 1.2.1 -

在MongoDB中,文档(Document)是最基本的数据单元,它代表了一组有序的键值对(即字段和值)。这些键值对在结构上类似于JavaScript的对象字面量(Object Literal)或Python的字典(Dictionary),也类似于JSON(JavaScript Object Notation)格式的数据。

MongoDB使用BSON(Binary JSON)格式来存储文档。BSON是一种类JSON的二进制编码格式,它支持更丰富的数据类型,如日期、时间戳、二进制数据等,同时保留了JSON的易用性。

以下是一个简单的MongoDB文档的例子:

{  
   _id: ObjectId("60e87384e776f823c42e2187"),  
   name: "John Doe",  
   age: 30,  
   email: "johndoe@example.com",  
   address: {  
      street: "123 Main St",  
      city: "Anytown",  
      state: "NY",  
      zip: "12345"  
   }  
}

在这个例子中,文档包含了多个字段,如_id、name、age、email和address。其中,_id字段是MongoDB自动为每个文档添加的唯一标识符,除非明确指定了一个不同的值。address字段本身又是一个嵌套文档,包含了地址的详细信息。

MongoDB的文档模型提供了很大的灵活性,因为可以在同一个集合中存储结构不同的文档。这种灵活性使得MongoDB非常适合于处理不断变化的数据结构和需求。

集合- 1.2.2 -

在MongoDB中,集合(Collection)是一个非常重要的概念,它是用于存储文档的容器,类似于关系型数据库中的表(Table)。集合中存储的文档可以是各种结构和类型的,这也是MongoDB灵活性的体现之一。

以下是关于MongoDB集合的一些关键点:

  • 动态模式:与关系型数据库中的表不同,MongoDB的集合不需要事先定义结构(即模式)。可以在同一个集合中存储结构完全不同的文档。这种灵活性使得MongoDB能够轻松应对快速变化的数据需求。

  • 创建集合:在MongoDB中,向一个不存在的集合中插入文档时,MongoDB会自动创建该集合。也可以使用createCollection方法显式创建集合,并可以在创建时指定一些选项,如大小限制、文档数量上限或是否使用Capped集合等。

  • 命名规则:集合名称不能是空字符串,不能含有\0(空字符),不应以system.开头(这是为MongoDB内部集合保留的前缀),并且通常是区分大小写的(这取决于文件系统的特性)。

  • 无固定结构:集合中的文档可以有不同的字段和结构。这意味着可以在同一个集合中存储各种不同类型的数据,只要这些数据对应用程序来说是有意义的。

  • 索引:为了提高查询性能,可以在集合的一个或多个字段上创建索引。MongoDB支持多种类型的索引,包括单字段索引、复合索引、多键索引、地理空间索引等。

  • 分片:对于非常大的数据集,MongoDB支持分片(Sharding)功能,可以将数据分布在多个服务器上,以实现水平扩展和高吞吐量。

  • 原子操作:在单个文档级别上,MongoDB的操作(如update和remove)是原子的,这意味着它们要么完全成功,要么完全失败,不会出现部分更新的情况。

  • CRUD操作:可以对集合执行各种CRUD(创建、读取、更新、删除)操作,包括插入新文档、查询文档、更新文档和删除文档。

  • 聚合管道:MongoDB提供了强大的聚合管道(Aggregation Pipeline),可以对集合中的文档进行复杂的聚合操作,如分组、过滤、排序和投影等。

  • GridFS:对于需要存储大量小文件或大型二进制对象的情况,MongoDB提供了GridFS规范,它使用两个集合(通常是fs.files和fs.chunks)来存储文件的元数据和实际数据块。

数据库- 1.2.3 -

在MongoDB中,数据是按照层次结构组织的:实例(服务器)> 数据库 > 集合 > 文档。这种层次结构为数据的组织和访问提供了清晰的路径。

在MongoDB中,数据库是一个逻辑容器,用于存储集合。每个数据库都是物理上隔离的,拥有自己独立的集合、索引、用户和权限等。数据库在MongoDB实例中是相互独立的,一个MongoDB实例可以同时承载多个数据库,每个数据库用于不同的应用、项目或环境。

数据库的名称在MongoDB实例中必须是唯一的,并且遵循特定的命名规则。例如,数据库名不能是空字符串,不能含有\0(空字符),不应以system.开头(这是为MongoDB内部保留的前缀),并且区分大小写(取决于底层文件系统)。