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

每部电影有两个文档:

  • 来自 movieCritic 的一个,带有 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 按标题的字母顺序对结果进行排序。

给本页内容打分