定义
返回通过组合每个组的输入文档创建的文档。
$mergeObjects累加器可在以下阶段使用:
注意
消歧
本页描述了用作累加器时的 $mergeObjects。累加器返回一群组输入文档的聚合值。
您还可以在其他上下文中使用 $mergeObjects:
$mergeObjects (expression),它将一大量文档合并为一个文档。$mergeObjects (window function),在$setWindowFields阶段用于从窗口中的文档返回合并文档。
语法
{ $mergeObjects: <expression> }
行为
$mergeObjects 忽略 null 输入值。如果所有输入值为 null,则 $mergeObjects 返回空文档{ }。
$mergeObjects 在合并文档时覆盖字段值。如果多个输入文档包含相同的字段名称,则输出包含包含冲突字段的最后一个输入文档的值。
例子
创建一个 movieReviews 集合:
db.movieReviews.insertMany( [ { title: "Galactic Odyssey", source: "filmCritic", data: { rating: 8.1, votes: 1482903 } }, { title: "Galactic Odyssey", source: "viewerVault", data: { tomatometer: 79, audienceScore: 85 } }, { title: "Neon Horizon", source: "filmCritic", data: { rating: 7.4, votes: 983201 } }, { title: "Neon Horizon", source: "viewerVault", data: { tomatometer: 68, audienceScore: 74 } }, { title: "The Last Protocol", source: "filmCritic", data: { rating: 8.7, votes: 2104567 } }, { title: "The Last Protocol", source: "viewerVault", data: { tomatometer: 91, audienceScore: 88 } } ] )
每部电影有两个文档:
来自 movieCritic 的一个,带有
rating和votes字段。来自viewerVault 的一个,带有
tomatometer和audienceScore字段。
由于两个源文档具有不同的字段名称,$mergeObjects 可以将它们组合成一个包含所有四个字段的完整配置文件。
以下管道在 $group 阶段使用 $mergeObjects 将每个来源的查看数据合并到每部电影的单个文档中:
db.movieReviews.aggregate( [ { $group: { _id: "$title", allRatings: { $mergeObjects: "$data" } } }, { $sort: { _id: 1 } } ] )
在前面的管道中: