Wanneer u mongoimport
. gebruikt om bestanden in MongoDB te importeren, hebt u de mogelijkheid om bestaande documenten te vervangen die overeenkomen met degene die u importeert.
Hiermee bedoel ik, als een geïmporteerd document dezelfde _id
. heeft waarde als een bestaand document in de verzameling waarin u importeert, wordt het bestaande document vervangen door het document dat wordt geïmporteerd.
U kunt ook een ander veld specificeren (anders dan de _id
veld) om indien nodig het overeenkomende veld te zijn.
De manier om bestaande documenten te vervangen bij gebruik van mongoimport
is om upsert
. te gebruiken modus.
Voorbeeld
Stel dat we een verzameling hebben met de naam pets
die de volgende documenten bevatten:
db.pets.find()
Resultaat:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 } { "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 } { "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }
En we hebben het volgende JSON-bestand genaamd pets.json
:
{"_id":2,"name":"Fetch","type":"Dog"} {"_id":3,"name":"Scratch","type":"Cat","weight":10} {"_id":4,"name":"Hop","type":"Kangaroo","weight":60}
De volgende opdracht importeert het JSON-bestand in de verzameling:
mongoimport --db=PetHotel --collection=pets --mode=upsert --file=data/pets.json
Dit gebruikt upsert
modus om overeenkomende documenten te vervangen door de geïmporteerde.
Controleer de resultaten
Laten we de collectie nu eens bekijken.
db.pets.find()
Resultaat:
{ "_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 }
We kunnen zien dat document 2 volledig is vervangen. De hond Bark
is vervangen door de hond Fetch
, en er wordt geen gewicht geregistreerd voor Fetch
.
Document 3 is ook vervangen en document 4 is een geheel nieuw document.
De Upsert-veld(en) wijzigen
U kunt de --upsertFields
. gebruiken parameter om een ander veld dan _id
op te geven om tegen te matchen. Wanneer u deze parameter gebruikt, geeft u de velden door als een door komma's gescheiden lijst.
Stel dat we een ander JSON-bestand hebben met de naam pets2.json
die we willen importeren, en het ziet er als volgt uit:
{"name":"Fetch","type":"Dog","weight":20,"gooddog":true} {"name":"Scratch","type":"Cat","weight":15} {"name":"Bubbles","type":"Fish"}
Dit document bevat niet de _id
veld, dus we zouden moeten vergelijken met andere velden die elk document op unieke wijze identificeren. In dit geval zouden we de name
. kunnen gebruiken en type
velden.
We kunnen daarom de volgende mongoimport
. gebruiken commando:
mongoimport --db=PetHotel --collection=pets --mode=upsert --upsertFields=name,type --file=data/pets2.json
Laten we nu de collectie nog eens bekijken:
db.pets.find()
Resultaat:
{ "_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" }
We kunnen zien dat Fetch is bijgewerkt/vervangen (maar de _id
waarde blijft hetzelfde). Hetzelfde met Scratch.
Bubbels daarentegen hadden geen match voor de upsert-velden en werden daarom ingevoegd.
Controleer op mongoimport
mongoimport
maakt deel uit van het MongoDB Database Tools-pakket. De MongoDB Database Tools zijn een reeks opdrachtregelhulpprogramma's voor het werken met MongoDB.
Als u niet zeker weet of u over de MongoDB Database Tools/mongoimport
beschikt geïnstalleerd, probeer dan het volgende commando in je Terminal of Command Prompt uit te voeren om te controleren:
mongoimport --version
Als je het hebt, zou je versie-informatie, enz. moeten zien. Als je het niet hebt, kun je de installatie-instructies op de MongoDB-website gebruiken om het op je systeem te installeren.
Waar moeten de opdrachten worden uitgevoerd?
Vergeet niet dat u mongoimport
. moet uitvoeren opdrachten vanaf de opdrachtregel van uw systeem (bijvoorbeeld een nieuw Terminal- of opdrachtpromptvenster).
Voer ze niet uit vanuit de mongo
schelp.