sql >> Database >  >> NoSQL >> MongoDB

Documenten samenvoegen bij het importeren van een bestand in MongoDB

Wanneer u mongoimport . gebruikt om bestanden in MongoDB te importeren, heb je de mogelijkheid om bestaande documenten samen te voegen met degene die je importeert.

In dit geval, als een geïmporteerd document dezelfde _id . heeft waarde als een bestaand document in de verzameling waarin u importeert, wordt het bestaande document samengevoegd met 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.

Wanneer u documenten samenvoegt, combineert het resulterende document bestaande gegevens met alle nieuwe gegevens in het geïmporteerde bestand. Alle gegevens die hetzelfde zijn, blijven hetzelfde. Eventuele conflicterende gegevens zullen ertoe leiden dat de gegevens van het geïmporteerde bestand de bestaande gegevens overschrijven. Als een geïmporteerd document geen veld bevat dat in het corresponderende document in de MongoDB-verzameling staat, blijft dat veld ongewijzigd in de verzameling (d.w.z. het wordt niet verwijderd of gewijzigd).

De manier om documenten samen te voegen met mongoimport is om merge . 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" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

En we hebben het volgende JSON-bestand genaamd 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}

De volgende opdracht importeert het JSON-bestand in de collectie:

mongoimport --db=PetHotel --collection=pets --mode=merge --file=data/pets.json

Dit gebruikt merge modus om overeenkomende documenten samen te voegen met de geïmporteerde documenten.

Controleer de resultaten

Laten we de collectie nu eens bekijken.

db.pets.find()

Resultaat:

{ "_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 }

We kunnen zien dat document 1 ongewijzigd is, document 2 heeft zijn naamveld gewijzigd in Fetch , en het heeft ook een weight . gehad veld toegevoegd.. Aan document 3 is ook een gewichtsveld toegevoegd en document 4 is ingevoegd.

De Upsert-veld(en) wijzigen

U kunt de --upsertFields . gebruiken parameter om een ​​ander veld dan _id op te geven 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":"Wag","type":"Dog","weight":20.0,"gooddog":true}
{"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=merge --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", "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" }

We kunnen zien dat Wag is bijgewerkt (maar de _id waarde blijft hetzelfde).

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. Mongo DB-relaties tussen objecten

  2. Mongoose 'statische' methoden versus 'instantie' methoden

  3. 2 Helm-kaarten met gedeelde Redis-afhankelijkheid

  4. MongoDB $cosh