sql >> Base de Datos >  >> NoSQL >> MongoDB

Cómo fusionar documentos al importar un archivo a MongoDB

Cuando usas mongoimport para importar archivos a MongoDB, tiene la opción de combinar los documentos existentes con los que está importando.

En este caso, si un documento importado tiene el mismo _id valor como uno existente en la colección a la que está importando, el documento existente se fusionará con el que se está importando.

También puede especificar otro campo (que no sea el _id field) para que sea el campo coincidente si es necesario.

Cuando combina documentos, el documento resultante combinará los datos existentes con cualquier dato nuevo que esté en el archivo importado. Cualquier dato que sea igual seguirá siendo el mismo. Cualquier dato en conflicto dará como resultado que los datos del archivo importado sobrescriban los datos existentes. Si un documento importado no contiene un campo que está en el documento correspondiente en la colección MongoDB, ese campo permanecerá sin cambios en la colección (es decir, no se eliminará ni cambiará).

La forma de fusionar documentos con mongoimport es usar merge modo.

Ejemplo

Supongamos que tenemos una colección llamada pets que contienen los siguientes documentos:

db.pets.find()

Resultado:

{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Y tenemos el siguiente archivo JSON llamado pets.json :

{"_id":2.0,"name":"Fetch","type":"Dog","weight":40.0}
{"_id":3.0,"weight":10.0}
{"_id":4.0,"name":"Hop","type":"Kangaroo","weight":60.0}

El siguiente comando importa el archivo JSON a la colección:

mongoimport --db=PetHotel --collection=pets --mode=merge --file=data/pets.json

Esto usa merge modo para fusionar documentos coincidentes con los importados.

Comprueba los resultados

Echemos un vistazo a la colección ahora.

db.pets.find()

Resultado:

{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Fetch", "type" : "Dog", "weight" : 40 }
{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 10 }
{ "_id" : 4, "name" : "Hop", "type" : "Kangaroo", "weight" : 60 }

Podemos ver que el documento 1 no ha cambiado, el documento 2 ha cambiado su campo de nombre a Fetch , y también ha tenido un weight campo agregado.. Al documento 3 también se le agregó un campo de ponderación y se insertó el documento 4.

Cambiar los campos Upsert

Puede usar --upsertFields parámetro para especificar un campo que no sea _id para emparejar contra. Al usar este parámetro, pase los campos como una lista separada por comas.

Supongamos que tenemos otro archivo JSON llamado pets2.json que queremos importar, y se ve así:

{"name":"Wag","type":"Dog","weight":20.0,"gooddog":true}
{"name":"Bubbles","type":"Fish"}

Este documento no incluye el _id campo, por lo que tendríamos que hacer coincidir con otros campos que identifican de forma única cada documento. En este caso podríamos usar el name y type los campos.

Por lo tanto, podemos usar el siguiente mongoimport comando:

mongoimport --db=PetHotel --collection=pets --mode=merge --upsertFields=name,type --file=data/pets2.json

Ahora revisemos la colección nuevamente:

db.pets.find()

Resultado:

{ "_id" : 1, "name" : "Wag", "type" : "Dog", "gooddog" : true, "weight" : 20 }
{ "_id" : 2, "name" : "Fetch", "type" : "Dog", "weight" : 40 }
{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 10 }
{ "_id" : 4, "name" : "Hop", "type" : "Kangaroo", "weight" : 60 }
{ "_id" : ObjectId("5ff0548dd991410169412300"), "name" : "Bubbles", "type" : "Fish" }

Podemos ver que Wag ha sido actualizado (pero el _id el valor sigue siendo el mismo).

Bubbles, por otro lado, no tenía coincidencia para los campos upsert y, por lo tanto, se insertó.

Busca mongoimport

mongoimport es parte del paquete de herramientas de base de datos de MongoDB. Las herramientas de base de datos de MongoDB son un conjunto de utilidades de línea de comandos para trabajar con MongoDB.

Si no está seguro de tener MongoDB Database Tools/mongoimport instalado, intente ejecutar el siguiente comando en su Terminal o Símbolo del sistema para verificar:

mongoimport --version

Si lo tiene, debería ver la información de la versión, etc. Si no lo tiene, puede usar las instrucciones de instalación en el sitio web de MongoDB para instalarlo en su sistema.

¿Dónde ejecutar los comandos?

No olvides que debes ejecutar mongoimport comandos desde la línea de comandos de su sistema (por ejemplo, una nueva ventana de terminal o símbolo del sistema).

No los ejecutes desde mongo cáscara.