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 fase de $merge agregación de Amazon DocumentDB se utiliza para combinar los resultados de la fase 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 varias 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 combinarán 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". Amazon DocumentDB no admite la especificación de una canalización de agregación como whenMatched valor.

  • 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) Si se establece entrue, los documentos escritos en la colección de destino por $merge fase omiten cualquier regla de validación de esquemas ($jsonSchema) definida 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 usar la $merge etapa para actualizar una users colección con datos nuevos 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 sobre el uso del $merge comando, elige la pestaña del idioma que quieres usar:

Node.js

Este es 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()