添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
耍酷的墨镜  ·  Spring Data MongoDB ...·  4 周前    · 
讲道义的鞭炮  ·  springboot mongodb ...·  4 周前    · 
有情有义的橙子  ·  birdben·  4 周前    · 
文雅的猴子  ·  洛阳市政府采购网·  6 月前    · 
仗义的长颈鹿  ·  【华为 B3 ...·  7 月前    · 
Docs 菜单
/ / /
数据库命令
/

聚合

aggregate

使用 聚合管道 执行聚合操作。管道允许用户通过一系列基于阶段的操作来处理集合或其他来源的数据。

提示

mongosh 中,此命令也可通过 db.aggregate() db.collection.aggregate() 助手方法或 watch() 助手方法来运行。

辅助方法对 mongosh 用户来说很方便,但它们返回的信息级别可能与数据库命令不同。如果不追求方便或需要额外的返回字段,请使用数据库命令。

此命令可用于以下环境中托管的部署:

重要

此命令在 M 0 、 M 2和 M 5集群中提供有限支持。 有关更多信息,请参阅 不支持的命令。

5.0 版本中的更改

该命令具有以下语法:

db.runCommand(
{
aggregate: "<collection>" || 1,
pipeline: [ <stage>, <...> ],
explain: <boolean>,
allowDiskUse: <boolean>,
cursor: <document>,
maxTimeMS: <int>,
bypassDocumentValidation: <boolean>,
readConcern: <document>,
collation: <document>,
hint: <string or document>,
comment: <any>,
writeConcern: <document>,
let: <document> // Added in MongoDB 5.0
}
)

aggregate 命令将以下字段作为参数:

字段
类型
说明
aggregate
字符串
充当聚合管道的输入的集合或视图的名称。使用 1 执行与集合无关的命令。
pipeline
阵列
聚合管道阶段数组,作为聚合管道的一部分处理和转换文档流。
explain
布尔

可选。指定返回关于管道处理的信息。

不适用于 多文档事务

allowDiskUse

布尔

可选。

使用此选项可以覆盖特定查询的 allowDiskUseByDefault 。您可以使用此选项执行以下任一操作:

  • 禁止在默认允许使用磁盘的系统上使用磁盘。

  • 支持在默认情况下禁止使用磁盘的系统上使用磁盘。

从 MongoDB 6.0 开始,如果 allowDiskUseByDefault 设置为 true ,并且服务器需要超过 100 MB 的内存用于管道执行阶段,那么 MongoDB 会自动将临时文件写入磁盘,除非查询指定了 { allowDiskUse: false }

有关详细信息,请参阅 allowDiskUseByDefault

如果聚合阶段因为 内存限制 而写入临时文件,则 分析器日志消息 诊断日志消息 包含一个 usedDisk 指示器。

cursor
文档

指定包含控制游标对象创建选项的文档。

MongoDB 删除了对 不带 aggregate 选项的 cursor 命令的使用,该命令包含 explain 选项的情况除外。除非包含 explain 选项,否则必须指定游标选项。

  • 要指示具有默认批次大小的游标,请指定 cursor: {}

  • 要指示具有非默认批次大小的游标,请使用 cursor: { batchSize: <num> }

maxTimeMS
non-negative integer

可选。

指定时间限制(以毫秒为单位)。如果您未指定 maxTimeMS 值,操作将不会超时。如果值为 0 ,则显式指定默认无限制行为。

MongoDB 使用与 db.killOp() 相同的机制终止超过分配的时间限制的操作。MongoDB 仅在指定的 中断点 之一中终止操作。

bypassDocumentValidation
布尔

可选。仅当您指定 $out $merge 聚合阶段时使用。

启用 aggregate 可在操作过程中绕过文档验证。这样就可以插入不符合验证要求的文档。

readConcern
文档

可选。指定 读关注

readConcern 选项的语法如下: readConcern: { level: <value> }

可能的读关注级别是:

有关读关注级别的更多信息,请参阅 读关注级别

$out 阶段不能与读关注 "linearizable" 一起使用。如果为 db.collection.aggregate() 指定 "linearizable" 读关注,则不能将 $out 阶段包括在管道中。

$merge 阶段不能与读关注 "linearizable" 一起使用。换言之,如果您为 db.collection.aggregate() 指定 "linearizable" 读关注,则不能将 $merge 阶段包括在管道中。

collation
文档

可选。

指定用于操作的 排序规则

排序规则 允许用户为字符串比较指定特定于语言的规则,例如字母大小写和重音符号规则。

排序规则选项的语法如下:

collation: {
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
}

指定排序规则时, locale 字段为必填字段;所有其他排序规则字段均为可选字段。有关字段的说明,请参阅 排序规则文档

如果未指定排序规则,但集合具有默认排序规则(请参阅 db.createCollection() ),则操作将使用为集合指定的排序规则。

如果没有为收集或操作指定排序规则,MongoDB 将使用先前版本中使用的简单二进制比较来进行字符串比较。

您不能为一个操作指定多个排序规则。例如,您不能为每个字段指定不同的排序规则,或者如果执行带排序的查找,则不能使用一种排序规则进行查找而另一种排序规则进行排序。

hint
字符串或文档

可选。用于该聚合的索引。该索引位于运行聚合的初始集合/视图上。

通过索引名称或索引规范文档来指定索引。

hint 不适用于 $lookup $graphLookup 阶段。

comment
any

可选。用户提供的待附加到该命令的注释。设置后,该注释将与该命令的记录一起出现在以下位置:

注释可以是任何有效的 BSON 类型 (字符串、整型、对象、数组等)。

aggregate 命令上设置的任何注释都将由在 aggregate 游标上运行的任何后续 getMore 命令继承。

writeConcern
文档

可选。一个表达 写关注 的文档,该写关注会与 $out $merge 阶段一起配合使用。

$out $merge 阶段省略使用默认写关注。

let
文档

可选。

指定包含变量列表的文档。这样可以将变量与查询文本分开,从而提高命令的可读性。

文档语法为:

{
<variable_name_1>: <expression_1>,
...,
<variable_name_n>: <expression_n>
}

变量设置为表达式返回的值,并且之后不能再进行更改。

要访问命令中的变量值,请使用双美元符号前缀 ( $$ ) 以及 $$<variable_name> 形式的变量名称。例如: $$targetTotal

要使用变量筛选管道 $match 阶段的结果,必须在 $expr 运算符中访问该变量。

有关使用 let 和变量的完整示例,请参阅 let 中使用变量

版本 5.0 中的新增功能

MongoDB 删除了对 不带 aggregate 选项的 cursor 命令的使用,该命令包含 explain 选项的情况除外。除非包含 explain 选项,否则必须指定游标选项。

  • 要指示具有默认批次大小的游标,请指定 cursor: