Quando usi mongoimport
per importare file in MongoDB, hai la possibilità di unire i documenti esistenti con quelli che stai importando.
In questo caso, se un documento importato ha lo stesso _id
valore come esistente nella raccolta in cui stai importando, il documento esistente verrà unito a quello da importare.
Puoi anche specificare un altro campo (diverso da _id
campo) come campo corrispondente, se richiesto.
Quando unisci i documenti, il documento risultante combinerà i dati esistenti con tutti i nuovi dati presenti nel file importato. Tutti i dati che sono gli stessi rimarranno gli stessi. Eventuali dati in conflitto comporteranno la sovrascrittura dei dati del file importato rispetto ai dati esistenti. Se un documento importato non contiene un campo che si trova nel documento corrispondente nella raccolta MongoDB, quel campo rimarrà invariato nella raccolta (cioè non verrà rimosso o modificato).
Il modo per unire documenti con mongoimport
consiste nell'usare merge
modalità.
Esempio
Supponiamo di avere una collezione chiamata pets
che contengono i seguenti documenti:
db.pets.find()
Risultato:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" } { "_id" : 2, "name" : "Bark", "type" : "Dog" } { "_id" : 3, "name" : "Meow", "type" : "Cat" }
E abbiamo il seguente file JSON chiamato pets.json
:
{"_id":2.0,"name":"Fetch","type":"Dog","weight":40.0} {"_id":3.0,"weight":10.0} {"_id":4.0,"name":"Hop","type":"Kangaroo","weight":60.0}
Il comando seguente importa il file JSON nella raccolta:
mongoimport --db=PetHotel --collection=pets --mode=merge --file=data/pets.json
Questo utilizza merge
modalità per unire i documenti corrispondenti a quelli importati.
Controlla i risultati
Diamo un'occhiata alla collezione ora.
db.pets.find()
Risultato:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" } { "_id" : 2, "name" : "Fetch", "type" : "Dog", "weight" : 40 } { "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 10 } { "_id" : 4, "name" : "Hop", "type" : "Kangaroo", "weight" : 60 }
Possiamo vedere che il documento 1 è invariato, il campo del nome del documento 2 è stato modificato in Fetch
, e ha anche avuto un weight
campo aggiunto.. Al documento 3 è stato aggiunto anche un campo peso ed è stato inserito il documento 4.
Cambia il/i campo/i Upsert
Puoi usare il --upsertFields
parametro per specificare un campo diverso da _id
contro 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":"Wag","type":"Dog","weight":20.0,"gooddog":true} {"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=merge --upsertFields=name,type --file=data/pets2.json
Ora controlliamo di nuovo la collezione:
db.pets.find()
Risultato:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "gooddog" : true, "weight" : 20 } { "_id" : 2, "name" : "Fetch", "type" : "Dog", "weight" : 40 } { "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 10 } { "_id" : 4, "name" : "Hop", "type" : "Kangaroo", "weight" : 60 } { "_id" : ObjectId("5ff0548dd991410169412300"), "name" : "Bubbles", "type" : "Fish" }
Possiamo vedere che Wag è stato aggiornato (ma il _id
il valore rimane lo stesso).
Bubbles invece, non aveva corrispondenze 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.