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

Come sostituire i documenti esistenti durante l'importazione di un file in MongoDB

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.