Definición
Devuelve un documento creado al combinar los documentos de entrada para cada grupo.
El acumulador $mergeObjects está disponible en estas etapas:
Nota
Desambiguación
Esta página describe $mergeObjects cuando se utiliza como acumulador. Los acumuladores devuelven un valor agregado a partir de un grupo de documentos de entrada.
También puedes usar $mergeObjects (expression), que fusiona una serie de documentos en un solo documento.
Sintaxis
{ $mergeObjects: <expression> }
El <expression> puede ser cualquier expresión válida que se evalúe como un documento.
Comportamiento
$mergeObjects Ignora los valores de entrada null. Si todos los valores de entrada son null, $mergeObjects devuelve un documento vacío { }.
$mergeObjects Sobrescribe los valores de los campos al fusionar los documentos. Si varios documentos de entrada contienen el mismo nombre de campo, la salida contendrá el valor del último documento de entrada que contenga el campo conflictivo.
Ejemplo
Cree una colección 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 } } ] )
Cada película tiene dos documentos:
Uno de filmCritic con los campos
ratingyvotes.Uno de viewerVault con los campos
tomatometeryaudienceScore.
Debido a que los dos documentos fuente tienen nombres de campo diferentes, $mergeObjects puede combinarlos en un perfil completo que incluya los cuatro campos.
El siguiente proceso utiliza $mergeObjects en una etapa $group para combinar los datos de las reseñas de cada fuente en un único documento para cada película:
db.movieReviews.aggregate( [ { $group: { _id: "$title", allRatings: { $mergeObjects: "$data" } } }, { $sort: { _id: 1 } } ] )
En el pipeline anterior:
$groupagrupa los documentos portitley utiliza$mergeObjectspara fusionar losdatasubdocumentos de cada fuente. Dado que los documentos de FilmCritic y ViewerVault contienen nombres de campo diferentes, el resultado fusionado incluye todos los campos de ambas fuentes.$sortordena los resultados alfabéticamente por título.