文档 (Document)

MongoDB 中的基本数据单元,类似于关系型数据库中的“行”,文档在数据库内以 BSON 格式 存储,通常用客户端查看时会以 JSON 格式展示。

集合 (Collection)

一组文档的集合,类似于关系型数据库中的“表”,但是 MongoDB 中的集合没有固定的模式, 所以一个集合可以包含不同结构的文档。

索引 (Index)

一种特殊的数据结构,它存储了数据库集合中的数据的一部分,以便快速查找。没有索引的 数据库查询可能需要扫描整个数据集来找到匹配的数据,效率较低。

索引的缺点是需要占用额外的存储空间,以及稍微降低写入性能(增删改),因为更新数据 时可能伴随着索引的更新。

MongoDB 支持多种类型的索引,以适应不同的查询需求:

  1. 单字段索引:在一个字段上建立的索引。默认情况下,MongoDB 为每个集合的 _id 字段 创建一个唯一索引。

  2. 复合索引:在多个字段上建立的索引,用于支持在这些字段上的组合查询。

  3. 多键索引:如果索引的字段是数组类型,MongoDB 会为数组中的每个元素创建索引条目, 这种索引称为多键索引。

  4. 全文索引:支持对文本内容进行搜索的索引,可以在一个或多个字符串字段上创建。

  5. 地理空间索引:用于对地理空间数据进行查询,如查找某个地点附近的地点或在某个区 域内的地点。

聚合操作

聚合操作处理多个文档并返回计算结果,可以使用聚合操作来:

  • 将多个文档中的值组合在一起。
  • 对分组数据执行操作,返回单一结果。
  • 分析一段时间内的数据变化。

可以通过“聚合管道”或“单一的聚合方法”完成聚合操作。

聚合管道 (aggregate)

聚合管道是执行聚合的首选方法,由一个或多个处理文档的阶段组成:

  • 每个阶段对输入文档执行一个操作。例如,某个阶段可以过滤文档、对文档进行分组并计 算值。
  • 从一个阶段输出的文档将传递到下一阶段。
  • 一个聚合管道可以返回针对文档组的结果。例如,返回总值、平均值、最大值和最小值。

以下聚合管道示例包含两个阶段,并返回按披萨名称分组的中型披萨的总订单数量:

db.orders.aggregate( [
 
   // Stage 1: Filter pizza order documents by pizza size
   {
      $match: { size: "medium" }
   },
 
   // Stage 2: Group remaining documents by pizza name and calculate total quantity
   {
      $group: { _id: "$name", totalQuantity: { $sum: "$quantity" } }
   }
 
] )

单一目的聚合方法

单一目的聚合方法聚合单个集合中的文档,这些方法很简单,但缺乏聚合管道的功能。

方法说明
db.collection.estimatedDocumentCount()返回集合或视图中文档的近似数量
db.collection.count()返回集合或视图中文档的数量
db.collection.distinct()返回具有指定字段的不同值的文档数组