对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。

$mergeObjects(累加器运算符)

$mergeObjects

返回通过组合每个组的输入文档创建的文档。

$mergeObjects 累加器可在以下阶段使用:

注意

消歧

本页介绍了 $mergeObjects 用作 累加器 时的情况。累加器返回跨一组输入文档的聚合值。

您还可以使用 $mergeObjects (expression),它将文档数组合并到单个文档中。

{ $mergeObjects: <expression> }

<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 } }] )

每部电影都有两个文档:

  • 来自 filmCritic 的一个,具有 rating 和 votes 字段。

  • 来自 viewerVault 的一个,带有 tomatometer 和 audienceScore 字段。

因为两个源文档具有不同的字段名称,$mergeObjects 可以将它们组合成为一个完整的资料,其中包含所有四个字段。

以下管道在 $group 阶段中使用 $mergeObjects 将来自每个源的查看数据组合成为每部电影的单个文档:

db.movieReviews.aggregate( [ { $group: { _id: "$title", allRatings: { $mergeObjects: "$data" } } }, { $sort: { _id: 1 } }] )

在前面的管道中:

  • $group 按 title 对文档进行分组,并使用 $mergeObjects 合并来自每个源的 data 个子文档。由于 FilmCritic 和 ViewerVault 文档包含不同的字段名,合并结果包含来自两个源的所有字段。

  • $sort 按照标题字母顺序排列结果。

给本页内容打分