该命令具有以下语法:
在版本3.6中更改。
小费
aggregate
大多数用户应该直接使用Shell中db.collection.aggregate()
提供mongo
的帮助程序或驱动程序中的等效帮助程序,而不是直接运行命令。在2.6及更高版本中,
db.collection.aggregate()
帮助程序始终返回游标。
该aggregate
命令将以下字段用作参数:
领域 | 类型 | 描述 |
---|---|---|
aggregate |
串 | 充当聚合管道输入的集合或视图的名称。使用1 收集无关的命令。 |
pipeline |
数组 | 一系列聚合管道阶段,用于处理和转换作为聚合管道一部分的文档流。 |
explain |
布尔值 | 可选的。指定返回有关管道处理的信息。 在多文档交易中不可用。 |
allowDiskUse | 布尔值 | 可选的。允许写入临时文件。设置为时
从MongoDB 4.2开始,事件探查器日志消息和诊断日志消息包括一个 |
cursor |
文献 | 指定一个包含控制光标对象创建的选项的文档。 在3.6版本中更改: MongoDB的3.6移除使用
|
maxTimeMS |
非负整数 | 可选的。指定用于游标的处理操作的时间限制(以毫秒为单位)。如果未为maxTimeMS指定值,则操作不会超时。值 MongoDB使用与相同的机制终止超出其分配的时间限制的操作 |
bypassDocumentValidation |
布尔值 |
允许 3.2版中的新功能。 |
readConcern |
文献 | 可选的。指定读取关注。 从MongoDB 3.6开始,readConcern选项具有以下语法: 可能的阅读关注级别为:
有关阅读关注级别的更多信息,请参阅 阅读关注级别。 从MongoDB 4.2开始,此 该 |
collation |
文献 | 可选的。 指定 用于操作的排序规则。 归类允许用户为字符串比较指定特定于语言的规则,例如字母大写和重音符号的规则。 排序规则选项具有以下语法: 指定排序规则时,该 如果未指定排序规则,但是集合具有默认排序规则(请参阅参考资料 如果没有为集合或操作指定排序规则,则MongoDB使用先前版本中使用的简单二进制比较进行字符串比较。 您不能为一个操作指定多个排序规则。例如,您不能为每个字段指定不同的排序规则,或者如果对排序执行查找,则不能对查找使用一种排序规则,而对排序使用另一种排序规则。 3.4版的新功能。 |
hint |
字符串或文件 | 可选的。用于聚合的索引。索引位于运行聚合的初始集合/视图上。 通过索引名称或索引规范文档指定索引。 注意 该 3.6版的新功能。 |
comment |
串 | 可选的。用户可以指定任意字符串,以帮助通过数据库概要分析器,currentOp和日志来跟踪操作。 3.6版的新功能。 |
writeConcern |
文献 |
MongoDB的3.6移除使用aggregate
命令
而不的cursor
选项,除非该命令包含
explain
选项。除非包括该explain
选项,否则必须指定游标选项。
cursor:
{}
cursor: {
batchSize: <num> }
版本4.0中的新功能。
对于在会话内创建的游标,不能getMore
在会话外调用
。
同样,对于在会话外部创建的游标,不能getMore
在会话内部调用
。
从MongoDB 3.6开始,MongoDB驱动程序和mongo
外壳程序将所有操作与服务器会话相关联,但未确认的写操作除外。对于未与会话明确关联的操作(即使用Mongo.startSession()
),MongoDB驱动程序和mongo
外壳程序会创建一个隐式会话并将其与该操作相关联。
如果会话空闲时间超过30分钟,则MongoDB服务器会将会话标记为已过期,并可以随时关闭它。当MongoDB服务器关闭会话时,它还会终止所有正在进行的操作并打开与该会话关联的游标。这包括配置了30分钟noCursorTimeout
或maxTimeMS
30分钟以上的光标。
对于返回游标的操作,如果游标可能闲置了30分钟以上,请在显式会话中使用发出操作,Session.startSession()
并使用refreshSessions
命令定期刷新该会话。请参阅
以获取更多信息。Session Idle Timeout
但是,事务中不允许以下阶段:
您也不能指定该explain
选项。
重要
在大多数情况下,与单文档写入相比,多文档事务产生的性能成本更高,并且多文档事务的可用性不应代替有效的架构设计。在许多情况下, 非规范化数据模型(嵌入式文档和数组)对于您的数据和用例将继续是最佳的。也就是说,在许多情况下,对数据进行适当的建模将最大程度地减少对多文档交易的需求。
有关其他事务使用方面的注意事项(例如运行时限制和oplog大小限制),另请参见 生产注意事项。
在3.4版本中更改: MongoDB的3.6移除使用aggregate
命令
没有的cursor
选项,除非该命令包含
explain
选项。除非包括该explain
选项,否则必须指定游标选项。
cursor:
{}
cursor: {
batchSize: <num> }
aggregate
大多数用户应该直接使用Shell中db.collection.aggregate()
提供mongo
的帮助程序或驱动程序中的等效帮助程序,而不是直接运行命令。在2.6及更高版本中,
db.collection.aggregate()
帮助程序始终返回游标。
除了前两个示例演示命令语法外,此页面中的示例都使用
db.collection.aggregate()
帮助程序。
集合articles
包含如下文档:
以下示例aggregate
对articles
集合执行操作,以计算tags
出现在集合中的数组中每个不同元素的计数。
在mongo
外壳程序中,此操作可以如下所示使用
db.collection.aggregate()
帮助程序:
以下示例在admin数据库上运行具有两个阶段的管道。第一阶段运行该$currentOp
操作,第二阶段过滤该操作的结果。
注意
该aggregate
命令未指定集合,而是采用{aggregate:1}的形式。这是因为初始
$currentOp
阶段不会从集合中获取输入。它产生自己的数据,供管道的其余部分使用。
db.aggregate()
添加了新的帮助程序,以帮助运行诸如此类的无集合聚合。上面的聚合也可以像这个例子一样运行。
聚合管道阶段具有最大的内存使用限制。要处理大型数据集,请将
allowDiskUse
option设置true
为启用以将数据写入临时文件,如以下示例所示:
从MongoDB 4.2开始,事件探查器日志消息和诊断日志消息包括一个usedDisk
指示符,指示是否有任何聚合阶段由于内存限制而将数据写入临时文件。
要指定初始批次大小,请batchSize
在
cursor
字段中指定,如以下示例所示:
该文档仅指定初始
批次大小的大小。与其他MongoDB游标一样,为OP_GET_MORE操作指定后续的批处理大小。A
of 表示第一个空批处理,如果您想快速获取游标或失败消息而不进行大量服务器端工作,则a有用。{batchSize: 0 }
batchSize
0