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

Los modos de importación de mongoimport

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.