Cuando usas mongoimport
para importar archivos a MongoDB, tiene la opción de reemplazar los documentos existentes que coincidan con los que está importando.
Con esto quiero decir, si un documento importado tiene el mismo _id
valor como uno existente en la colección a la que está importando, el documento existente será reemplazado por 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.
La forma de reemplazar documentos existentes cuando se usa mongoimport
es usar upsert
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", "weight" : 20 } { "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 } { "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }
Y tenemos el siguiente archivo JSON llamado pets.json
:
{"_id":2,"name":"Fetch","type":"Dog"} {"_id":3,"name":"Scratch","type":"Cat","weight":10} {"_id":4,"name":"Hop","type":"Kangaroo","weight":60}
El siguiente comando importa el archivo JSON a la colección:
mongoimport --db=PetHotel --collection=pets --mode=upsert --file=data/pets.json
Esto usa upsert
modo para reemplazar los 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", "weight" : 20 } { "_id" : 2, "name" : "Fetch", "type" : "Dog" } { "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight" : 10 } { "_id" : 4, "name" : "Hop", "type" : "Kangaroo", "weight" : 60 }
Podemos ver que el documento 2 ha sido completamente reemplazado. El perro Bark
ha sido reemplazado por el perro Fetch
, y no se registra ningún peso para Fetch
.
El documento 3 también ha sido reemplazado y el documento 4 es un documento completamente nuevo.
Cambiar los campos Upsert
Puede usar --upsertFields
parámetro para especificar un campo que no sea _id
contra el cual emparejar. 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":"Fetch","type":"Dog","weight":20,"gooddog":true} {"name":"Scratch","type":"Cat","weight":15} {"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=upsert --upsertFields=name,type --file=data/pets2.json
Ahora revisemos la colección nuevamente:
db.pets.find()
Resultado:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 } { "_id" : 2, "name" : "Fetch", "type" : "Dog", "weight" : 20, "gooddog" : true } { "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight" : 15 } { "_id" : 4, "name" : "Hop", "type" : "Kangaroo", "weight" : 60 } { "_id" : ObjectId("5ff00800d99141016941217c"), "name" : "Bubbles", "type" : "Fish" }
Podemos ver que Fetch ha sido actualizado/reemplazado (pero el _id
el valor sigue siendo el mismo). Lo mismo con Scratch.
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.