Al usar mongoimport
para importar archivos a MongoDB, tiene la opción de especificar un modo para usar. Estos modos determinan qué sucede si ya hay documentos coincidentes en la colección a la que intenta importar.
Por defecto, mongoimport
usa insert
pero hay otros modos que puede usar. El modo que utilice dependerá de lo que intente hacer.
A continuación se muestra una descripción general de cada modo junto con ejemplos.
Los modos
Los modos de importación disponibles en mongoimport
son los siguientes:
Modo | Descripción |
---|---|
insert | Este es el modo predeterminado. Este modo inserta los documentos del archivo de importación. Si ya existe un documento coincidente en la colección, se produce un error. Un documento coincidente es aquel que tiene la misma ID única (como un _id coincidente campo) como un documento en el archivo de importación. |
upsert | Reemplaza documentos existentes en la base de datos con documentos coincidentes del archivo de importación. Se insertan todos los demás documentos. |
merge | Combina documentos existentes que coinciden con un documento en el archivo de importación con el nuevo documento. Se insertan todos los demás documentos. |
delete | Elimina los documentos existentes en la base de datos que coinciden con un documento en el archivo de importación. Cualquier documento que no coincida no tiene efecto. |
A continuación se muestran ejemplos de cómo funciona cada modo.
Modo de inserción
Supongamos que tenemos una colección llamada pets
con los siguientes documentos:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" } { "_id" : 2, "name" : "Bark", "type" : "Dog" } { "_id" : 3, "name" : "Meow", "type" : "Cat" }
Resulta que se importaron en un archivo llamado pets.json
.
Ahora imagina que tenemos otro archivo JSON llamado pets2.json
, que contiene los siguientes documentos JSON:
{ "_id" : 1, "weight": 40 } { "_id" : 2, "name" : "Bark", "type" : "Dog", "weight": 10 } { "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight": 5 } { "_id" : 4, "name" : "Bubbles", "type" : "Fish", "weight": 3 }
Esto es lo que sucede si tratamos de importar eso a nuestras pets
colección mientras usa (el valor predeterminado) insert
modo.
mongoimport --db=PetHotel --collection=pets --file=pets2.json
Salida:
2021-01-03T10:07:23.421+1000 connected to: mongodb://localhost/ 2021-01-03T10:07:23.422+1000 continuing through error: E11000 duplicate key error collection: PetHotel.pets index: _id_ dup key: { _id: 1 } 2021-01-03T10:07:23.422+1000 continuing through error: E11000 duplicate key error collection: PetHotel.pets index: _id_ dup key: { _id: 2 } 2021-01-03T10:07:23.422+1000 continuing through error: E11000 duplicate key error collection: PetHotel.pets index: _id_ dup key: { _id: 3 } 2021-01-03T10:07:23.423+1000 1 document(s) imported successfully. 3 document(s) failed to import.
Según ese mensaje de error, solo se importó uno de los cuatro documentos. Los otros tres causaron un error por tener una clave duplicada en el _id
campo.
Ahora veamos la colección.
db.pets.find()
Resultado:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" } { "_id" : 2, "name" : "Bark", "type" : "Dog" } { "_id" : 3, "name" : "Meow", "type" : "Cat" } { "_id" : 4, "name" : "Bubbles", "type" : "Fish", "weight" : 3 }
Entonces podemos ver que se insertó el último documento. Esto era de esperar, porque anteriormente no teníamos un documento con un _id
valor de 4
.
Modo de inserción
Esto es lo que sucede si usamos upsert
modo para insertar el mismo documento.
mongoimport --db=PetHotel --collection=pets --mode=upsert --file=pets2.json
Salida:
2021-01-03T10:19:55.400+1000 connected to: mongodb://localhost/ 2021-01-03T10:19:55.444+1000 3 document(s) imported successfully. 0 document(s) failed to import.
El resultado nos dice que 3 de los 4 documentos se importaron correctamente y que no hubo fallas.
Revisemos la colección.
db.pets.find()
Resultado:
{ "_id" : 1, "weight" : 40 } { "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 } { "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight" : 5 } { "_id" : 4, "name" : "Bubbles", "type" : "Fish", "weight" : 3 }
Podemos ver que los primeros tres documentos han sido reemplazados con los documentos del archivo de importación. El cuarto documento permanece igual que después de la importación anterior.
Observe que el primer documento ha perdido su name
y type
los campos. Esto se debe a que upsert
mode reemplaza todo el documento, y nuestro documento de reemplazo solo tiene el weight
(así como el campo _id
campo).
Modo de fusión
Modifiquemos nuestro pets2.json
archivo para que se vea así:
{ "_id" : 1, "name": "Wag", "type": "Dog" } { "_id" : 2, "name" : "Fetch" } { "_id" : 3, "name" : "Scratch" } { "_id" : 4, "name" : "Bubbles" } { "_id" : 5, "name" : "Hop", "type": "Kangaroo" }
Ahora ejecutemos mongoimport
comando de nuevo, pero esta vez en merge
modo:
mongoimport --db=PetHotel --collection=pets --mode=merge --file=pets2.json
Salida:
2021-01-03T10:32:33.596+1000 connected to: mongodb://localhost/ 2021-01-03T10:32:33.607+1000 3 document(s) imported successfully. 0 document(s) failed to import.
Según la salida, se importaron 3 documentos.
Echemos un vistazo a la colección.
db.pets.find()
Resultado:
{ "_id" : 1, "weight" : 40, "name" : "Wag", "type" : "Dog" } { "_id" : 2, "name" : "Fetch", "type" : "Dog", "weight" : 10 } { "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight" : 5 } { "_id" : 4, "name" : "Bubbles", "type" : "Fish", "weight" : 3 } { "_id" : 5, "name" : "Hop", "type" : "Kangaroo" }
Podemos ver que se actualizaron los documentos 1 y 2, y se insertó el documento 5. Respecto al documento 1, el weight
el campo se mantuvo a pesar de que el documento de importación no incluía ese campo. Esto se debe a que usamos merge
modo. Si hubiéramos usado upsert
modo (como en el ejemplo anterior), el weight
el campo habría desaparecido.
Modo Eliminar
Cuando usas delete
modo, los documentos coincidentes simplemente se eliminan. Los documentos que no coinciden permanecen en la colección.
Entonces, veamos qué sucede cuando importamos el mismo documento, pero esta vez cambiamos a delete
modo.
mongoimport --db=PetHotel --collection=pets --mode=delete --file=pets2.json
Resultado:
2021-01-03T10:39:38.925+1000 connected to: mongodb://localhost/ 2021-01-03T10:39:38.926+1000 5 document(s) deleted successfully. 0 document(s) failed to delete.
Se eliminaron los 5 documentos de la colección.
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.
No estoy seguro si tiene 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 mongoimport
¿Comandos?
Necesitas 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.