Quando usi mongoimport
per importare file in MongoDB, hai la possibilità di sostituire i documenti esistenti che corrispondono a quelli che stai importando.
Con questo intendo se un documento importato ha lo stesso _id
valore come esistente nella raccolta in cui stai importando, il documento esistente verrà sostituito con quello in fase di importazione.
Puoi anche specificare un altro campo (diverso da _id
campo) come campo corrispondente, se richiesto.
Il modo per sostituire i documenti esistenti quando si utilizza mongoimport
è usare upsert
modalità.
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 }
E abbiamo il seguente file JSON chiamato pets.json
:
{"_id":2,"name":"Fetch","type":"Dog"} {"_id":3,"name":"Scratch","type":"Cat","weight":10} {"_id":4,"name":"Hop","type":"Kangaroo","weight":60}
Il comando seguente importa il file JSON nella raccolta:
mongoimport --db=PetHotel --collection=pets --mode=upsert --file=data/pets.json
Questo utilizza upsert
modalità per sostituire i documenti corrispondenti con quelli importati.
Controlla i risultati
Diamo un'occhiata alla collezione ora.
db.pets.find()
Risultato:
{ "_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 }
Possiamo vedere che il documento 2 è stato completamente sostituito. Il cane Bark
è stato sostituito con il cane Fetch
e nessun peso viene registrato per Fetch
.
Anche il documento 3 è stato sostituito e il documento 4 è un documento completamente nuovo.
Cambia il/i campo/i Upsert
Puoi usare il --upsertFields
parametro per specificare un campo diverso da _id
per cui confrontarsi. Quando si utilizza questo parametro, passare i campi come un elenco separato da virgole.
Supponiamo di avere un altro file JSON chiamato pets2.json
che vogliamo importare e si presenta così:
{"name":"Fetch","type":"Dog","weight":20,"gooddog":true} {"name":"Scratch","type":"Cat","weight":15} {"name":"Bubbles","type":"Fish"}
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=upsert --upsertFields=name,type --file=data/pets2.json
Ora controlliamo di nuovo la collezione:
db.pets.find()
Risultato:
{ "_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" }
Possiamo vedere che Fetch è stato aggiornato/sostituito (ma il _id
il valore rimane lo stesso). Lo stesso con Scratch.
Bubbles invece, non aveva corrispondenza per i campi upsert ed è stato quindi inserito.
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.