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

$mergeObjects(累加器运算符)

$mergeObjects

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

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

注意

消歧

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

您还可以在这些其他上下文中使用 $mergeObjects:

{ $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 按照标题字母顺序排列结果。

给本页内容打分