$merge - Amazon DocumentDB

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

$merge

Introduzido na versão 8.0

O estágio $merge de agregação no Amazon DocumentDB é usado para mesclar os resultados do estágio anterior do pipeline em uma coleção de destino. Isso é útil para atualizar ou inserir documentos em uma coleção de destino com base nos dados dos documentos de entrada.

O $merge estágio permite que você execute várias ações com base na condição de correspondência entre os documentos de entrada e a coleção de destino, como:

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

Parâmetros

  • into: (obrigatório) O nome da coleção de destino na qual mesclar os documentos de entrada.

  • on: (obrigatório) Os campos a serem usados como condição de correspondência entre os documentos de entrada e a coleção de destino.

  • whenMatched: (opcional) A ação a ser executada quando o documento de entrada corresponde a um documento existente na coleção de destino. Os valores compatíveis são: "merge", "replace", "keepExisting" e "fail".

  • whenNotMatched: (opcional) A ação a ser executada quando o documento de entrada não corresponde a nenhum documento na coleção de destino. Os valores suportados são: "insert" "fail" e.

Exemplo (MongoDB Shell)

O exemplo a seguir demonstra como usar o $merge estágio para atualizar uma users coleção com novos dados de um pipeline de entrada.

Crie documentos de amostra

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" } ]);

Exemplo de consulta

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

Saída

Depois de executar o $merge pipeline, a users coleção conterá os seguintes 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" } ]

Exemplos de código

Para ver um exemplo de código para usar o $merge comando, escolha a guia do idioma que você deseja usar:

Node.js

Aqui está um exemplo de uso do operador $merge em um aplicativo Node.js:

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

Aqui está um exemplo de uso do operador $merge em um aplicativo 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()