Mongodb tutorial (Document Database)

Dette er en windows installation af mongoDB server community edition:

https://www.mongodb.com/download-center/community

Installere .msi filen og tryk next hele tiden og vælge “Complete” installation.

Derefter skal du inde på dit C:\ Drev og oprette en ny folder som hedder “data” og inde i den folder skal du oprette en ny folder der hedder “db”:

  • C:\data\db’

Derefter skal du åbne CMD og gå ind (cd) i den folder som indeholder din Mongo.EXE

  • F.eks C:\Program Files\MongoDB\Server\4.2\bin
  • Du skal derefter skrive “mongod” commanden

mongod commanden er en Mongo Daemon som er host processen for databasen. Det den gøre når du udføre kommandoen er at du siger til den “start mongoDB processen og køre den i baggrunden” derefter gemmer den data i den folder du har oprettet tidligere /data/db og køre i porten 27017.

Derefter skal du køre MongoDB shellen:

  • åbne ENDNU en CMD samtidig med at du har den anden kørende og så skal du ind cd ind i den
  • C:\Program Files\MongoDB\Server\4.2\bin
  • Køre commandoen “mongo” 

Så mongod:

Kort for Mongo Daemon og er en baggrunds process som bliver brugt af en MongoDB server til at få ting gjort -> processen er ansvarlig for at håndtere hele MongoDB server opgaver som acceptere requests, give svar til bruger, og håndtere hukommelses krav af MongoDB.

Mongo

Er en interaktiv Javascript shell interface til MongoDB, som tilbyder en kraftig interface for system adminstrator og udvikler til at teste queries og operationer direkte med databasen. 

Nu hvor vi har både serveren og shellen oppe og køre så skal vi have oprettet en Datatabase.

Oprettelse af database:

Inde i CMD shellen udføre vi kommandoen “use” som opretter en database med et specifikt navn. Derefter kan man anvende “show dbs” som viser alle oprettede databaser. Men der ingen at vise fordi i vores database har vi ingen collection der simpelt hen ikke noget data. Det skal vi have oprettet med kommandoen “db.createCollection(‘navnpåcollection’). I dette tilfælde har vi kaldt vores collection for stats. Nu kan vi udføre “show dbs” og vores database vil nu blive vist. 

Nu har vi en database og en kollektion. Men vi har ikke noget data? Det vil vi gerne lave om på. Vi vil gerne indsætte et dokument/række i vores database:

i vores db instans kalder vi vores kollektion Stats og derefter kalder metoden insert() inde i metoden udfylder vi det data vi gerne vil gemme som JSON, vi kan have integers, strings, objekter osv kan gemmes. 

Hvad med når vi gerne vil indsætte flere ad gangen?

Vi anvender metoden insertMany() så vi kan indsætte flere dokumenter i vores database ad gangen. Læg mærke til at vi ikke har f.eks user objekter i det nye indsatte data – det er ikke noget problem i en NOSQL da man ikke behøver at følge samme struktur for dataen da vi ikke har en striks data model vi skal følge som man gøre i almindelig SQL.

Nu hvor vi har gemt dataen i databasen vil vi gerne kunne se dem eller ihvertfald finde dem i databasen

ved anvendelse af find() metoden kan man finde alle dokumenter i ens kollektion og med metoden pretty() får vi det skrevet ud som JSON så det er pænt og læsbart 

Hvis vi gerne vil lave en Query hvor vi gerne vil hente de dokumenter med specifikt data gøres det således:

Her får vi alle dokumenter hvor personer har lavet 5000 i skade. Dette ville være specielt relevant, i situationer hvor man vil finde f.eks. alle stats for en specifik user eller alle sats over folk som har ratingen ‘PlayedGood’

Man kan også sortere når man gerne vil finde dokumenter i sin database. F.eks. vil vi gerne finde alle dokumenter men hvor Kills er stigende:

det gøre vi ved at bruge sort() metoden og giver den værdien 1 for ascending og -1 for descending

Vi kan også finde ude af hvor mange dokumenter vi har i vores database ved anvendelsen af metoden count() samtidig kan man bruge limit for at begrænse hvor mange dokumenter man vil finde. 

Vi kan også anvende foreach loops hvor f.eks vi vil gerne finde alle dokumenter for hver deres rating:

Nu kan vi indsætte data i vores database og vi kan udføre get operation i vores database. Så det næste man skal kunne gøre er at opdatere sin database

f.eks vil vi gerne opdatere en a dokumenterne hvor spilleren faktisk har spillet dårligt det gøre vi således

ved brug af update metoden kan man opdatere på et specifikt dokument ved at give ojbect id’et som den får når man opretter et dokument. Derefter anvender man javascript $set til at ændre på specfikke værdier. Hvis man ikke bruger $set så fjerner den alt indhold fra dokumentet og indsætter kun det du har ændret. Og når man anvender upsert: true så vil den oprette et nyt dokument, hvis der ikke allerede findes et dokument med det givne id. 

Man kan også incrementer en værdi i et dokument som kan ses på overstående billede ved at anvende $inc. 

Man kan også ændre på selve fieldsene i et dokument som f.eks fra Kills til Dræbte ved at anvende $rename javascript funktionen. 

Nu kan vi opdater vores database så mangler vi en sidste funktionalitet og det er at kunne slette i sin database

dette sletter et dokument med et specifikt id. 

endnu en interessant funktion med mongoDB er at man nemt kan udføre relationer i dokumenter. F.eks. Kan man lave en EN-TIL-MANGE relation i det samme dokument. 

Som vi kan se her så har vi i vores collection indsættes et dokument der indeholder et HOLD i league of legends computerspil. Vi kan se at en kamp har en-til-mange relation til brugere dvs at et team har flere brugere men en bruger har kun et team. I mongoDB kaldes det ikke for en relation men hedder embedded document pattern. 

Vi kan nu bruge Javascript funktionen elemMatch til at finde teams med brugeren hvis navn er Thejokerd3.

Som det kan ses ud fra billedet kommer det team op som vi lige har lagt ind i vores database.

Noget af det smarte ved Document Database er at det er meget nemt og fleksibelt at indeksere. Vi kan selv oprette et indeks som vi vil kunne indeksere efter, i dette eksempel vil vi arbejde med “Color” så vi kan søge efter farven på holdet. Det gør vi ved at kører en createIndex funktion hvor vi giver hvilket field vi vil indeksere efter, samt hvilket format. I dette tilfælde tekst

Her kan vi så se at det er lykkedes os at tilføje vores indeks da der før var kun 1 indeks, hvilket var vores id, hvor der nu er 2 indekser.

Nu kan vil vi så søge efter alle de teams mede “color” som er ‘blue’. Det gør vi ved brug af det index vi lige har lavet, samt javascript funktionen $search hvor vi søger efter alle de dokumenter der har blue i vores text indekser som består af fielded color.

Derefter kan vi bruge Javascript funktionen $gte til at finde alle dokumenter hvor kills er højere eller lig med 15, hvis man kun vil finde værdier der er højere kan man bruge $gt, og ligeledes hvis man vil finde værdier der er lavere kan man bruge henholdsvis $lte eller $lt 

Skriv en kommentar

Design a site like this with WordPress.com
Kom igang