A partire da mongoimport
versione 100.0.0, puoi eliminare documenti in MongoDB in base a un file importato. Per fare ciò, usa delete
modalità.
Quando usi delete
modalità, se un documento importato ha lo stesso _id
valore come uno esistente nella raccolta in cui stai importando, il documento esistente verrà eliminato.
Puoi anche specificare un altro campo o campi (diversi da _id
campo) come campo corrispondente, se richiesto.
Esempio
Supponiamo di avere una collezione chiamata pets
che contengono i seguenti documenti:
db.pets.find()
Risultato:
{ "_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 }
E abbiamo il seguente file JSON chiamato pets.json
:
{"_id":1,"name":"Wag","type":"Dog"} {"_id":2,"name":"Fluffy","type":"Cat","weight":10} {"_id":9,"name":"Hop","type":"Kangaroo","weight":60}
Il comando seguente importa il file JSON utilizzando delete
modalità:
mongoimport --db=PetHotel --collection=pets --mode=delete --file=data/pets.json
L'esecuzione di questo comando elimina tutti i documenti corrispondenti nella raccolta.
Controlla i risultati
Diamo un'occhiata alla collezione ora.
db.pets.find()
Risultato:
{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 } { "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 } { "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 }
Possiamo vedere che i primi 2 documenti sono stati cancellati. Sono stati eliminati perché il loro _id
i valori corrispondevano a _id
valori nei documenti esistenti. Questo nonostante altri dettagli non corrispondano necessariamente (come nel documento 2).
Inoltre, il nostro file importato aveva un documento con un _id
di 9 ma non c'era alcun documento corrispondente, quindi nulla è stato cancellato per quello.
Cambia il/i campo/i Upsert
Puoi usare il --upsertFields
parametro per specificare un campo diverso da _id
per cui confrontarsi. Quando si utilizzano più campi con questo parametro, passarli come un elenco separato da virgole.
Supponiamo di avere un altro file JSON chiamato pets2.json
e si presenta così:
{ "name" : "Meow", "type" : "Cat", "weight" : 7 } { "name" : "Bubbles", "type" : "Fish", "weight" : 3 }
Questo documento non include il _id
campo, quindi dovremmo confrontare altri campi che identificano in modo univoco ogni documento. In questo caso potremmo usare il name
e type
campi.
Possiamo quindi utilizzare il seguente mongoimport
comando:
mongoimport --db=PetHotel --collection=pets --mode=delete --upsertFields=name,type --file=data/pets2.json
Ora controlliamo di nuovo la collezione:
db.pets.find()
Risultato:
{ "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 } { "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 }
Meow il gatto è stato eliminato perché quell'animale esisteva sia nella raccolta MongoDB che nel documento importato.
Bubbles il pesce non aveva alcun documento corrispondente e quindi non è stato eliminato nulla per quello.
Cerca mongoimport
mongoimport
fa parte del pacchetto MongoDB Database Tools. I MongoDB Database Tools sono una suite di utilità da riga di comando per lavorare con MongoDB.
Se non sei sicuro di avere MongoDB Database Tools/mongoimport
installato, prova a eseguire il seguente comando nel terminale o nel prompt dei comandi per verificare:
mongoimport --version
Se ce l'hai, dovresti vedere le informazioni sulla versione, ecc. Se non ce l'hai, puoi usare le istruzioni di installazione sul sito Web di MongoDB per installarlo sul tuo sistema.
Dove eseguire i comandi?
Non dimenticare che devi eseguire mongoimport
comandi dalla riga di comando del sistema (ad es. una nuova finestra del terminale o del prompt dei comandi).
Non eseguirli da mongo
guscio.