Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

$merge Etapa (Atlas Data Federation)

$merge Escribe los resultados de una canalización de agregación en una colección temporal en el clúster de Atlas. A continuación, Atlas Data Federation ejecuta $merge localmente en el clúster de Atlas para fusionar los datos en fragmentos en la colección de destino. En caso de fallo durante una $merge operación, esto garantiza que al menos una parte de los datos se escriba en la colección de destino.

En Atlas Data Federation, $merge puede:

  • Guarde datos desde cualquiera de los almacenes de instancia federada de base de datos compatibles.

  • Guardar en el mismo o en otro clúster de Atlas, base de datos o colección dentro del mismo Proyecto de Atlas.

Para permitir escrituras en un clúster de Atlas, Atlas Data Federation introduce una sintaxis alternativa para el into campo requerido. Atlas Data Federation admite todos los demás campos como se describe $merge para.

Para obtener más información, consulte la etapa del $merge proceso.

Para usar para escribir en una colección en el clúster de Atlas, debe ser un usuario de base de datos con los $merge siguientes privilegios:

Si la agregación falla, Atlas Data Federation no revierte ninguna escritura que $merge el haya completado antes de que ocurriera el error.

{
"$merge": {
"into": {
"atlas": {
"projectId": "<atlas-project-ID>",
"clusterName": "<atlas-cluster-name>",
"db": "<atlas-database-name>",
"coll": "<atlas-collection-name>"
}
},
"on": "<identifier field>"|[ "<identifier field1>", ...],
"let": { <variables> },
"whenMatched": "replace|keepExisting|merge|fail|pipeline",
"whenNotMatched": "insert|discard|fail"
}
}

Esta sección describe la sintaxis alternativa que Atlas Data Federation proporciona para el campo into.

Campo
Tipo
Descripción
Necesidad

atlas

Objeto

Ubicación para guardar los documentos desde el pipeline de agregación.

Requerido

clusterName

string

Nombre del clúster de Atlas

Requerido

coll

string

Nombre de la colección en el clúster Atlas.

Requerido

db

string

Nombre de la base de datos en el clúster Atlas que contiene la colección.

Requerido

projectId

string

Identificador único del proyecto que contiene el clúster de Atlas. Este es el ID del Proyecto que contiene su instancia federada de base de datos. Si se omite, se usa como valor por defecto el ID del Proyecto que contiene la instancia federada de base de datos.

Opcional

Para obtener más información sobre los otroson letcampos,,, whenMatched y,whenNotMatched consulte la documentación del servidor MongoDB $merge para.

Nota

Para utilizar on en varios campos, debes crear un índice único compuesto en los campos identificadores ``on``.

Opción
Tipo
Descripción
Necesidad

background

booleano

Bandera para ejecutar operaciones de agregación en segundo plano. Si se omite, el valor por defecto es false. Cuando se establece en true, Atlas Data Federation ejecuta las consultas en segundo plano.

{ "background" : true }

Utiliza esta opción si deseas enviar otras consultas nuevas sin esperar a que se completen las consultas en curso o desconectar la conexión de tu instancia federada de base de datos mientras las consultas continúan ejecutándose en segundo plano.

Opcional

Al escribir documentos desde tu fichero o tus almacenes de datos en tu clúster de Atlas, tus documentos podrían tener campos duplicados _id. Esta sección describe cómo Atlas Data Federation resuelve los duplicados e incluye recomendaciones para resolver los duplicados en tu pipeline de agregación.

Para resolver los duplicados, Atlas Data Federation:

  1. Escribe documentos en una colección de Atlas X en el orden en que recibe los documentos hasta que encuentra un duplicado.

  2. Escribe el documento con el campo _id duplicado y todos los documentos posteriores en una nueva colección de Atlas Y.

  3. Ejecuta la etapa especificada $merge para fusionar la colección Y en la colección X.

  4. Guarda los documentos resultantes en la colección de destino en el clúster de Atlas especificado.

Nota

Atlas Data Federation solo resuelve los valores duplicados en el campo _id. No resuelve valores duplicados en otros campos con índices únicos.

Para remediar los campos duplicados de _id, se puede:

  1. Incluya una etapa en su canalización para especificar el orden en que Atlas Data Federation debe procesar los documentos $sort resultantes.

  2. Según el orden de los documentos que llegan a la etapa,$merge elija whenMatched whenNotMatched cuidadosamente el valor para $merge las opciones y de la etapa.

    Ejemplo

    Los siguientes ejemplos muestran cómo Atlas Data Federation resuelve duplicados durante la etapa $merge cuando whenMatched la opción está configurada en keepExisting o replace. Estos ejemplos utilizan los siguientes documentos:

    {
    "_id" : 1,
    "state" : "FL"
    },
    {
    "_id" : 1,
    "state" : "NJ"
    },
    {
    "_id" : 2,
    "state" : "TX"
    }

    Supón que ejecutas el siguiente pipeline en los documentos listados arriba:

    db.s3coll.aggregate([
    {
    "$sort": {
    "_id": 1,
    "state": 1,
    }
    },
    {
    "$merge": {
    "into": {
    "atlas": {
    "clusterName": "clustername",
    "db": "clusterdb",
    "coll": "clustercoll"
    }
    },
    "on": "_id",
    "whenMatched": "keepExisting",
    "whenNotMatched": "insert"
    }
    }
    ])

    Atlas Data Federation escribe los siguientes datos en dos colecciones llamadas X y Y:

    // Collection X
    {
    "_id" : 1,
    "state" : "FL"
    }
    // Collection Y
    {
    "_id" : 1,
    "state" : "NJ"
    },
    {
    "_id" : 2,
    "state" : "TX"
    }

    Atlas Data Federation luego fusiona documentos de la colección Y en la colección X. Para la opción de whenMatched: keepExisting en el pipeline, Atlas Data Federation mantiene el documento existente con _id: 1 en la colección X. Por lo tanto, el resultado de la pipeline con duplicados contiene los siguientes documentos:

    {
    "_id" : 1,
    "state" : "FL"
    },
    {
    "_id" : 2,
    "state" : "TX"
    }

    Atlas Data Federation fusiona estos documentos en la colección de destino en el clúster Atlas especificado.

    Supón que ejecutas el siguiente pipeline en los documentos listados arriba:

    db.s3coll.aggregate([
    {
    "$sort": {
    "_id": 1,
    "state": 1,
    }
    },
    {
    "$merge": {
    "into": {
    "atlas": {
    "clusterName": "clustername",
    "db": "clusterdb",
    "coll": "clustercoll"
    }
    },
    "on": "_id",
    "whenMatched": "replace",
    "whenNotMatched": "insert"
    }
    }
    ])

    Atlas Data Federation escribe los siguientes datos en dos colecciones llamadas X y Y:

    // Collection X
    {
    "_id" : 1,
    "state" : "FL"
    }
    // Collection Y
    {
    "_id" : 1,
    "state" : "NJ"
    },
    {
    "_id" : 2,
    "state" : "TX"
    }

    Atlas Data Federation fusiona documentos de la colección Y en la colección X. Para la opción whenMatched: replace en la pipeline, Atlas Data Federation reemplaza el documento con _id: 1 en la colección X con el documento con _id: 1 en la colección Y. Por lo tanto, el resultado de la pipeline con duplicados contiene los siguientes documentos:

    {
    "_id" : 1,
    "state" : "NJ"
    },
    {
    "_id" : 2,
    "state" : "TX"
    }

    Atlas Data Federation fusiona estos documentos en la colección de destino en el clúster Atlas especificado.

  3. Evitar usar la opción whenNotMatched: discard.

    Ejemplo

    Este ejemplo muestra cómo Atlas Data Federation resuelve duplicados cuando la opción whenNotMatched está configurada en discard usando los siguientes documentos:

    {
    "_id" : 1,
    "state" : "AZ"
    },
    {
    "_id" : 1,
    "state" : "CA"
    },
    {
    "_id" : 2,
    "state" : "NJ"
    },
    {
    "_id" : 3,
    "state" : "NY"
    },
    {
    "_id" : 4,
    "state" : "TX"
    }

    Supón que ejecutas el siguiente pipeline en los documentos listados arriba:

    db.archivecoll.aggregate([
    {
    "$sort": {
    "_id": 1,
    "state": 1,
    }
    },
    {
    "$merge": {
    "into": {
    "atlas": {
    "clusterName": "clustername",
    "db": "clusterdb",
    "coll": "clustercoll"
    }
    },
    "on": "_id",
    "whenMatched": "replace",
    "whenNotMatched": "discard"
    }
    }
    ])

    Atlas Data Federation escribe los siguientes datos en dos colecciones llamadas X y Y:

    // Collection X
    {
    "_id" : 1,
    "state" : "AZ" // gets replaced
    }
    // Collection Y
    {
    "_id" : 1,
    "state" : "CA"
    }
    {
    "_id" : 2,
    "state" : "NJ" // gets discarded
    }
    {
    "_id" : 3,
    "state" : "NY" // gets discarded
    }
    {
    "_id" : 4,
    "state" : "TX" // gets discarded
    }

    Atlas Data Federation fusiona documentos de la colección Y en la colección X. Para la opción whenMatched: replace en el pipeline, Atlas Data Federation reemplaza el documento con _id: 1 en la colección X con el documento con _id: 1 en la colección Y. Para la opción whenNotMatched: discard en el pipeline, Atlas Data Federation descarta documentos en la colección Y que no coincidan con un documento en la colección X. Por lo tanto, el resultado de la pipeline con duplicados contiene únicamente el siguiente documento:

    {
    "_id" : 1,
    "state" : "CA"
    }

    Atlas Data Federation luego fusiona este documento en la colección objetivo en el clúster Atlas especificado.

La siguiente sintaxis de ejemplo $merge escribe los resultados en una sampleDB.mySampleData colección en el clúster de Atlas myTestCluster llamada. El ejemplo no especifica un ID de proyecto; la $merge etapa utiliza el ID del proyecto que contiene la instancia de la base de datos federada.

Ejemplo

1db.mySampleData.aggregate(
2 [
3 {
4 "$merge": {
5 "into": {
6 "atlas": {
7 "clusterName": "myTestCluster",
8 "db": "sampleDB",
9 "coll": "mySampleData"
10 }
11 },
12 ...
13 }
14 }
15 ]
16)

La siguiente sintaxis de ejemplo $merge escribe los resultados en una sampleDB.mySampleData colección en el clúster Atlas llamado myTestCluster en segundo plano. El ejemplo no especifica un ID de proyecto; la $merge etapa utiliza el ID del proyecto que contiene la instancia de la base de datos federada.

Ejemplo

1db.runCommand({
2 "aggregate": "mySampleData",
3 "pipeline": [
4 {
5 "$merge": {
6 "into": {
7 "atlas": {
8 "clusterName": "myTestCluster",
9 "db": "sampleDB",
10 "coll": "mySampleData"
11 }
12 },
13 ...
14 }
15 }
16 ],
17 { "background" : true }
18})