View a markdown version of this page

$merge - Amazon DocumentDB

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

$merge

Introducido en 8.0

La etapa de $merge agregación de Amazon DocumentDB se utiliza para combinar los resultados de la etapa de canalización anterior en una colección de destino. Esto resulta útil para actualizar o insertar documentos en una colección de destino en función de los datos de los documentos de entrada.

La $merge etapa permite realizar diversas acciones en función de la condición de coincidencia entre los documentos de entrada y la colección de destino, como:

- Insert new documents - Update existing documents - Delete documents - Fail the operation if there are any conflicts

Parámetros

  • into: (obligatorio) El nombre de la colección de destino en la que se van a combinar los documentos de entrada.

  • on: (obligatorio) Los campos que se van a utilizar como condición de coincidencia entre los documentos de entrada y la colección de destino.

  • whenMatched: (opcional) La acción que se debe realizar cuando el documento de entrada coincide con un documento existente en la colección de destino. Los valores admitidos son: "merge", "replace", "keepExisting" y "fail".

  • whenNotMatched: (opcional) La acción que se debe realizar cuando el documento de entrada no coincide con ningún documento de la colección de destino. Los valores admitidos son: "insert" y"fail".

  • bypassDocumentValidation: (opcional) Cuando se establece entrue, los documentos escritos en la colección de destino por la $merge etapa omiten las reglas de validación de esquemas ($jsonSchema) definidas en esa colección. El valor predeterminado esfalse, que hace cumplir las reglas de validación de la colección de destino. Esto es compatible con Amazon DocumentDB 8.0.

Ejemplo (MongoDB Shell)

El siguiente ejemplo muestra cómo utilizar el $merge escenario para actualizar una users colección con nuevos datos de una canalización de entrada.

Cree documentos de muestra

db.users.insertMany([ { _id: 1, name: "John Doe", email: "john@example.com" }, { _id: 2, name: "Jane Smith", email: "jane@example.com" } ]); db.inputData.insertMany([ { _id: 1, name: "John Doe", email: "john@example.com", phone: "123-456-7890" }, { _id: 3, name: "Bob Johnson", email: "bob@example.com", phone: "987-654-3210" } ]);

Ejemplo de consulta

db.inputData.aggregate([ { $merge: { into: "users", on: "_id", whenMatched: "merge", whenNotMatched: "insert" } } ])

Salida

Tras ejecutar la $merge canalización, la users colección contendrá los siguientes documentos:

[ { _id: 1, name: "John Doe", email: "john@example.com", phone: "123-456-7890" }, { _id: 2, name: "Jane Smith", email: "jane@example.com" }, { _id: 3, name: "Bob Johnson", email: "bob@example.com", phone: "987-654-3210" } ]

Ejemplos de código

Para ver un ejemplo de código para usar el $merge comando, elija la pestaña correspondiente al idioma que desee usar:

Node.js

A continuación, se muestra un ejemplo del uso del operador $merge en una Node.js aplicación:

const { MongoClient } = require('mongodb'); async function example() { const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false'); const db = client.db('test'); await db.collection('inputData').aggregate([ { $merge: { into: 'users', on: '_id', whenMatched: 'merge', whenNotMatched: 'insert' } } ]).toArray(); const users = await db.collection('users').find({}).toArray(); console.log(users); await client.close(); } example();
Python

Este es un ejemplo del uso del operador $merge en una aplicación de Python:

from pymongo import MongoClient def example(): client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false') db = client['test'] # Assumes collections 'users' and 'inputData' already exist with sample data db.inputData.aggregate([ { '$merge': { 'into': 'users', 'on': '_id', 'whenMatched': 'merge', 'whenNotMatched': 'insert' } } ]) users = list(db.users.find({})) print(users) client.close() example()