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

Cómo eliminar documentos de MongoDB importando un archivo

A partir de mongoimport versión 100.0.0, puede eliminar documentos en MongoDB en función de un archivo importado. Para hacer esto, use delete modo.

Cuando usas delete modo, 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 eliminará.

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

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 }
{ "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 }
{ "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 }

Y tenemos el siguiente archivo JSON llamado pets.json :

{"_id":1,"name":"Wag","type":"Dog"}
{"_id":2,"name":"Fluffy","type":"Cat","weight":10}
{"_id":9,"name":"Hop","type":"Kangaroo","weight":60}

El siguiente comando importa el archivo JSON usando delete modo:

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

Ejecutar este comando elimina cualquier documento coincidente en la colección.

Comprueba los resultados

Echemos un vistazo a la colección ahora.

db.pets.find()

Resultado:

{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }
{ "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 }
{ "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 }

Podemos ver que los 2 primeros documentos han sido eliminados. Se eliminaron porque su _id los valores coincidieron con el _id valores en los documentos existentes. Esto es a pesar de que otros detalles no necesariamente coinciden (como con el documento 2).

Además, nuestro archivo importado tenía un documento con un _id de 9 pero no había ningún documento coincidente, por lo que no se eliminó nada para ese.

Cambiar los campos Upsert

Puede usar --upsertFields parámetro para especificar un campo que no sea _id contra el cual emparejar. Cuando utilice varios campos con este parámetro, páselos como una lista separada por comas.

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

{ "name" : "Meow", "type" : "Cat", "weight" : 7 }
{ "name" : "Bubbles", "type" : "Fish", "weight" : 3 }

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=delete --upsertFields=name,type --file=data/pets2.json

Ahora revisemos la colección nuevamente:

db.pets.find()

Resultado:

{ "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 }
{ "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 }

Miau, el gato se eliminó porque esa mascota existía tanto en la colección de MongoDB como en el documento importado.

Bubbles the fish no tenía un documento coincidente, por lo que no se eliminó nada para ese.

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.