MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come unire documenti durante l'importazione di un file in MongoDB

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.