sql >> Database >  >> NoSQL >> MongoDB

Hoe bestaande documenten te vervangen bij het importeren van een bestand in MongoDB

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.


  1. Mongoimport van JSON-bestand

  2. MongoDB $ milliseconde

  3. Hoe een base64-afbeelding in reactie te tonen?

  4. HDFS NameNode High Availability in Hadoop