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

Sådan flettes dokumenter, når du importerer en fil til MongoDB

Når du bruger mongoimport for at importere filer til MongoDB, har du mulighed for at flette eksisterende dokumenter med dem, du importerer.

I dette tilfælde, hvis et importeret dokument har samme _id værdi som en eksisterende i den samling, du importerer til, vil det eksisterende dokument blive flettet med det, der importeres.

Du kan også angive et andet felt (andre end _id). felt) for at være det matchende felt, hvis det kræves.

Når du flette dokumenter, vil det resulterende dokument kombinere eksisterende data med alle nye data, der er i den importerede fil. Alle data, der er de samme, forbliver de samme. Eventuelle modstridende data vil resultere i, at den importerede fils data overskriver de eksisterende data. Hvis et importeret dokument ikke indeholder et felt, der er i det tilsvarende dokument i MongoDB-samlingen, forbliver dette felt uændret i samlingen (dvs. det vil ikke blive fjernet eller ændret).

Måden at flette dokumenter med mongoimport er at bruge merge tilstand.

Eksempel

Antag, at vi har en samling kaldet pets der indeholder følgende dokumenter:

db.pets.find()

Resultat:

{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Og vi har følgende JSON-fil kaldet 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}

Følgende kommando importerer JSON-filen til samlingen:

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

Dette bruger merge tilstand for at flette matchende dokumenter med de importerede.

Tjek resultaterne

Lad os tage et kig på kollektionen nu.

db.pets.find()

Resultat:

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

Vi kan se, at dokument 1 er uændret, dokument 2 har fået ændret sit navnefelt til Fetch , og den har også haft en weight felt tilføjet.. Dokument 3 har også fået tilføjet et vægtfelt, og dokument 4 er indsat.

Skift Upsert Field/s

Du kan bruge --upsertFields parameter for at angive et andet felt end _id at matche imod. Når du bruger denne parameter, skal du sende felterne som en kommasepareret liste.

Antag, at vi har en anden JSON-fil kaldet pets2.json som vi vil importere, og det ser sådan ud:

{"name":"Wag","type":"Dog","weight":20.0,"gooddog":true}
{"name":"Bubbles","type":"Fish"}

Dette dokument inkluderer ikke _id felt, så vi bliver nødt til at matche med andre felter, der entydigt identificerer hvert dokument. I dette tilfælde kunne vi bruge name og type felter.

Vi kan derfor bruge følgende mongoimport kommando:

mongoimport --db=PetHotel --collection=pets --mode=merge --upsertFields=name,type --file=data/pets2.json

Lad os nu tjekke samlingen igen:

db.pets.find()

Resultat:

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

Vi kan se, at Wag er blevet opdateret (men _id værdien forbliver den samme).

Bubbles på den anden side havde ingen match til upsert-felterne og blev derfor indsat.

Se efter mongoimport

mongoimport er en del af MongoDB Database Tools-pakken. MongoDB-databaseværktøjerne er en række kommandolinjeværktøjer til at arbejde med MongoDB.

Hvis du ikke er sikker på, om du har MongoDB Database Tools/mongoimport installeret, prøv at køre følgende kommando i din terminal eller kommandoprompt for at kontrollere:

mongoimport --version

Hvis du har det, bør du se versionsoplysninger osv. Hvis du ikke har det, kan du bruge installationsinstruktionerne på MongoDB-webstedet til at installere det på dit system.

Hvor skal kommandoerne køres?

Glem ikke, du skal køre mongoimport kommandoer fra dit systems kommandolinje (f.eks. et nyt terminal- eller kommandopromptvindue).

Kør dem ikke fra mongo skal.


  1. Redis Cluster vs ZeroMQ i Pub/Sub, til horisontalt skalerede distribuerede systemer

  2. Låsning og Redis

  3. Find alle duplikerede dokumenter i en MongoDB-samling ved et nøglefelt

  4. Hvordan indsætter man et element i MongoDB intern liste?