定义
返回窗口中文档的合并大量值的大量。
注意
消歧
本页介绍了用作窗口函数的 $concatArrays。
您还可以在其他上下文中使用 $concatArrays:
$concatArrays (accumulator),它将一群组文档中某个字段的大量值连接起来。$concatArrays (expression),它将单个文档中的两个或多个数组连接成一个大量。
语法
{ $setWindowFields: { ... output: { <field>: { $concatArrays: "<array field>" } } } }
行为
为 null 或解析为 null 的参数包含在结果中。结果不包含引用缺失字段的参数。
例子
以下示例使用 sample_mflix 示例数据集中的 movies 集合。有关如何将此数据集加载到部署中的详细信息,请参阅 加载示例数据集。
该示例使用 $setWindowFields 按发布年份对电影进行分区,并连接每个分区内的 genres 数组,并按标题排序。每个文档接收 genres 数组的串联,从其分区中的第一部电影到当前文档:
db.movies.aggregate( [ { $match: { year: { $in: [1914, 1915] } } }, { $setWindowFields: { partitionBy: { year: "$year" }, sortBy: { title: 1 }, output: { combinedGenres: { $concatArrays: "$genres", window: { documents: ["unbounded", "current"] } } } } }, { $project: { _id: 0, year: 1, title: 1, combinedGenres: 1 } } ] )
上述管道:
使用
$setWindowFields通过year和partitionBy对电影进行分区,并按title对每个分区进行排序。该阶段在[ "unbounded", "current" ]的文档窗口上将$concatArrays应用于genres字段。combinedGenres字段保存从分区中的第一部电影到当前文档的连接类型。使用
$project在输出中包含year、title和combinedGenres。
随着每个文档贡献其 genres大量,combinedGenres大量在每个分区内增长。