Definición
Combina varios documentos en un único documento.
Nota
Desambiguación
Esta página describe $mergeObjects cuando se utiliza como una expresión que fusiona una matriz de documentos.
También puede utilizar $mergeObjects (accumulator), que devuelve un documento combinado a partir de un grupo de documentos de entrada.
Sintaxis
Cuando se usa como expresión, $mergeObjects tiene esta sintaxis:
{ $mergeObjects: <expression> }
El operando <expression> puede ser:
Una única expresión que se evalúa como una matriz de documentos para fusionar. Por ejemplo,
$blogPostsdonde el campo del documentoblogPostscontiene una matriz de documentos.Una matriz de expresiones, cada una de las cuales se evalúa como un documento. Por ejemplo,
[ "$doc1", "$doc2", "$doc3" ], donde cada campo de documento contiene un único 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 | Resultados | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| | ||||||||
| | ||||||||
| | ||||||||
| |
Ejemplo
Los ejemplos de esta página utilizan datos del conjunto de datos sample_mflix. Para obtener más información sobre cómo cargar este conjunto de datos en su implementación autogestionada de MongoDB, consulte Cargar el conjunto de datos de ejemplo. Si realizó alguna modificación en las bases de datos de ejemplo, es posible que deba eliminarlas y volver a crearlas para ejecutar los ejemplos de esta página.
El siguiente proceso utiliza $mergeObjects en $replaceWith para fusionar los subdocumentos imdb y tomatoes.critic de cada película en un único documento ratings. Ambos subdocumentos contienen un campo rating, por lo que $mergeObjects sobrescribe la calificación imdb con la calificación tomatoes.critic. Los campos únicos de cada subdocumento se conservan en el resultado.
db.movies.aggregate( [ { $match: { genres: "Action", year: 2010, "imdb.rating": { $exists: true }, "tomatoes.critic.rating": { $exists: true } } }, { $sort: { title: 1 } }, { $limit: 5 }, { $replaceWith: { title: "$title", year: "$year", ratings: { $mergeObjects: [ "$imdb", "$tomatoes.critic" ] } } } ] )
En el pipeline anterior:
$matchfiltra las películas de acción de 2010 con unimdb.ratingytomatoes.critic.ratingexistentes.$sortordena los documentos alfabéticamente portitle.$limitRestringe la salida a documentos 5 para mejorar la legibilidad.$replaceWithutiliza$mergeObjectspara fusionar$imdby$tomatoes.criticen un camporatings.Debido a que ambos subdocumentos contienen un campo
rating,$mergeObjectsutiliza el valor detomatoes.critic(el último argumento).Los campos únicos
votesyiddeimdb, ynumReviewsymeterdetomatoes.critic, se conservan todos.