Åbn webinar "MongoDB Basics"

Venner, endnu en kursusstart "Database" finder sted i morgen, så vi holdt en traditionel åben lektion, som du kan se optagelsen af her. Denne gang talte vi om den populære MongoDB-database: vi studerede nogle af finesserne, så på det grundlæggende i drift, muligheder og arkitektur. Vi kom også ind på nogle User Cases.

Åbn webinar "MongoDB Basics"

Webinaret blev afholdt Ivan Bælte, chef for serverudvikling hos Citymobil.

MongoDB funktioner

MongoDB er et open source dokument-orienteret DBMS, der ikke kræver en beskrivelse af tabelskemaet. Det er klassificeret som NoSQL og bruger BSON (binær JSON). Skalerbar ud af boksen, skrevet i C++ og understøtter JavaScript-syntaks. Der er ingen SQL-understøttelse.

MongoDB har drivere til mange populære programmeringssprog (C, C++, C#, Go, Java, JavaScript, Perl, PHP, Python, Ruby osv.). Der er også uofficielle og community-understøttede drivere til andre programmeringssprog.

Nå, lad os se på de grundlæggende kommandoer, der kan være nyttige.

Så for at implementere MongoDB i Docker, vi skriver:

docker run -it --rm -p 127.0.0.1:27017:27017 
--name mongo-exp-project mongo
docker exec -it mongo-exp-project mongo

Sådan sker det kundelancering MongoDB:

Åbn webinar "MongoDB Basics"

Lad os nu skrive den traditionelle Hej Verden:

print (“Hello world!”)

Åbn webinar "MongoDB Basics"

Efter det - lad os starte cyklussen:

Åbn webinar "MongoDB Basics"

Som du har bemærket, før os almindelig JS, og MongoDB er en fuldgyldig JavaScript-fortolker.

Hvornår skal man bruge MongoDB?

Der er en historie om, at den gennemsnitlige startup i Silicon Valley er den person, der åbnede bogen "HTML for Dummies" for en uge siden. Hvilken stak vil han vælge? Enig at det er meget praktisk for ham, når han af indlysende årsager har JavaScript i sin browser, Node.js kører på serveren, og JavaScript kører også i databasen. Dette er punkt nummer 1.

For det andet er der stor præstation Peter Zaitsev, en af ​​de bedste databasespecialister i Rusland. I den taler Peter om MySQL og MongoDB, hvor han er særlig opmærksom på, hvornår og hvad der er bedst at bruge.

For det tredje vil jeg gerne understrege, at MongoDB er kendetegnet ved godt skalerbarhed - og dette er en af ​​nøglefunktionerne i databasen. Hvis du ikke på forhånd ved, hvad belastningen bliver, er MongoDB perfekt. Derudover understøtter den out-of-the-box mønstre som f.eks skæring и replikation, og alt dette er gjort ret gennemsigtigt, det vil sige, det er meget praktisk at arbejde.

med hensyn til terminologi i MongoDB så:

  • databaser er databaser (skemaer, samlinger af tabeller);
  • i MongoDB er der sådan noget som en samling - dette er en analog af en tabel og et sæt dokumenter, der logisk set skal forbindes;
  • dokumenter er analoge med en streng.

Databaseoprettelse og enkle forespørgsler

For at oprette en database skal du bare begynde at bruge den:

use learn

Åbn webinar "MongoDB Basics"

Lad os nu lave en lille indsættelse af dokumentet. Lad det for eksempel være en enhjørning ved navn Aurora:

db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450})

db - et globalt objekt til at få adgang til databasen, det vil sige i virkeligheden selve "mongaen". Bruges til skæring sh, til replikering - rs.

Hvilke kommandoer har objektet? db:

Åbn webinar "MongoDB Basics"

Så lad os vende tilbage til vores kommando, som et resultat af hvilken konsollen vil rapportere, at en linje er blevet indsat:

Åbn webinar "MongoDB Basics"

Word unicorns i et hold db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450}) betegner en samling. Bemærk her, at vi ikke beskrev eller oprettede kollektionen, men blot skrev 'enhjørninger', lavede et indstik, og vi havde en samling.

Og sådan kan vi få alle vores kollektioner:

db.getCollectionNames()

Og så videre. Kan indsæt en anden kollektion:

Åbn webinar "MongoDB Basics"

Lad os nu spørge komplet samling (vi minder dig om, at i vores tilfælde indeholder databasen allerede oplysninger om to enhjørninger med samme navn):

db.unicorns.find()

Bemærk venligst, her er vores JSON (der er et navn, køn, vægt, en eller anden unik objektidentifikator):

Åbn webinar "MongoDB Basics"

Lad os nu indsætte et par enhjørninger mere med de samme navne:

db.unicorns.insert({name: 'Leto', gender: 'm', 
home: 'Arrakeen', worm: false}) 
db.unicorns.insert({name: 'Leto', gender: 'm', 
home: 'Arrakeen', worm: false})

Og lad os se, hvad der skete:

Åbn webinar "MongoDB Basics"

Som du kan se, har vi yderligere felter: hjem и orm, som Aurora ikke har.

Lad os tilføje et par flere enhjørninger:

db.unicorns.insertMany([{name: 'Horny', dob: new Date(1992,2,13,7,47), loves: ['carrot','papaya'], weight: 600, gender: 'm', vampires: 63}, 
{name: 'Aurora', dob: new Date(1991, 0, 24, 13, 0), loves: ['carrot', 'grape'], weight: 450, gender: 'f', vampires: 43}, 
{name: 'Unicrom', dob: new Date(1973, 1, 9, 22, 10), loves: ['energon', 'redbull'], weight: 984, gender: 'm', vampires: 182}, 
{name: 'Roooooodles', dob: new Date(1979, 7, 18, 18, 44), loves: ['apple'], weight: 575, gender: 'm', vampires: 99}])

Så vi indsatte yderligere fire objekter ved hjælp af JavaScript:

Åbn webinar "MongoDB Basics"

Efter din mening, i hvilke databaser er det mere bekvemt at gemme pasdata: relationsdatabaser eller Mongo?

Svaret er indlysende - i Monga, og ovenstående eksempel viser dette godt. Det er ingen hemmelighed, at KLADR er en smerte i Den Russiske Føderation. Og Monga passer meget godt til adresser, for du kan indstille alt som et array, og livet bliver meget lettere. Og det er en god en Brugercase til MongoDB.

Lad os tilføje flere enhjørninger:

db.unicorns.insert({name: 'Solnara', dob: new Date(1985, 6, 4, 2, 1), loves:['apple', 'carrot', 'chocolate'], weight:550, gender:'f', vampires:80}); 
db.unicorns.insert({name:'Ayna', dob: new Date(1998, 2, 7, 8, 30), loves: ['strawberry', 'lemon'], weight: 733, gender: 'f', vampires: 40}); 
db.unicorns.insert({name:'Kenny', dob: new Date(1997, 6, 1, 10, 42), loves: ['grape', 'lemon'], weight: 690, gender: 'm', vampires: 39}); 
db.unicorns.insert({name: 'Raleigh', dob: new Date(2005, 4, 3, 0, 57), loves: ['apple', 'sugar'], weight: 421, gender: 'm', vampires: 2}); 
db.unicorns.insert({name: 'Leia', dob: new Date(2001, 9, 8, 14, 53), loves: ['apple', 'watermelon'], weight: 601, gender: 'f', vampires: 33}); 
db.unicorns.insert({name: 'Pilot', dob: new Date(1997, 2, 1, 5, 3), loves: ['apple', 'watermelon'], weight: 650, gender: 'm', vampires: 54}); 
db.unicorns.insert({name: 'Nimue', dob: new Date(1999, 11, 20, 16, 15), loves: ['grape', 'carrot'], weight: 540, gender: 'f'}); 
db.unicorns.insert({name: 'Dunx', dob: new Date(1976, 6, 18, 18, 18), loves: ['grape', 'watermelon'], weight: 704, gender: 'm', vampires: 165});

Åbn webinar "MongoDB Basics"

Vær nu opmærksom på dokumenterne. Som DOB Vi opbevarer hele genstande. Der er også information om, hvad en enhjørning elsker, og ikke alle har denne information. Så indeni ligger fuld array.

Forresten, for at vise resultaterne smukkere, kan du kalde metoden i slutningen af ​​søgekommandoen .pretty():

Åbn webinar "MongoDB Basics"

Hvis du har brug for at få oplysninger om den seneste fejl, brug følgende kommando:

db.getLastError()

Dette kan gøres efter hver indsættelse, eller du kan konfigurere Write Concern. Det er bedre at læse om det i officiel dokumentation, som i øvrigt er meget informativ i Monga. Den er i øvrigt også tilgængelig på Habré god artikel i denne anledning.

Lad os gå videre til mere komplekse forespørgsler

Forespørgsel efter nøjagtig feltværdi:

db.unicorns.find({gender: 'm'})

Ved at skrive en sådan anmodning vil vi modtage en liste over alle mandlige enhjørninger i konsoludgangen.

Du kan også gøre forespørgsel på flere felter på én gang: efter køn og efter vægt:

Åbn webinar "MongoDB Basics"

Ovenfor skal du være opmærksom på det særlige $gt vælger, som giver dig mulighed for at opdrætte alle han-enhjørninger, der vejer mere end 700.

Du kan tjekke eksisterer feltet overhovedet?:

db.unicorns.find({vampires: {$exists: false}})

Eller så:

db.unicorns.find({'parents.father': {$exists: true}})

Det næste hold vil bringe enhjørningerne frem, hvis navne begynder med bogstaverne A eller a:

db.unicorns.find({name: {$regex: "^[Aa]"}})

Lad os nu overveje array søgning. Spørgsmål #1: Hvad vil denne kommando udsende:

db.unicorns.find({loves:'apple'})

Det er rigtigt: alle, der elsker æbler.

Den følgende kommando returnerer kun de enhjørningsdata, der indeholder kun æbler og vandmeloner:

db.unicorns.find({loves:[ "apple", "watermelon" ]})

Og endnu en kommando:

db.unicorns.find({loves:[ "watermelon", "apple" ]})

I vores tilfælde vil det ikke returnere noget, da når vi passerer et array, sammenlignes det første element med det første, det andet med det andet osv. Det vil sige, at arrayet også skal matche efter stilling disse værdier.

Og sådan ser det ud søgning gennem et array ved hjælp af "OR"-operatoren:

Åbn webinar "MongoDB Basics"

Det følgende eksempel vil vise os søg ved hjælp af $all-operatoren. Og her er rækkefølgen ligegyldig:

Åbn webinar "MongoDB Basics"

Det kan vi også søg efter matrixstørrelse:

Åbn webinar "MongoDB Basics"

Men hvad nu hvis vi vil finde et array, hvis størrelse er større end én? Der er en operatør til dette $hvor, hvormed du kan skrive mere komplekse ting:

db.unicorns.find({$where: function() { return this.loves && (this.loves.length > 1) } })

Forresten, hvis du vil øve dig, der er du fil med kommandoer.

Markør funktioner

Lad os gå lidt væk og sige et par ord om funktionerne i Monga:

  • find() og andre operationer returnerer ikke data - de returnerer en såkaldt "cursor";
  • det faktum, at vi ser dataene blive printet, er tolkens arbejde.

Skrivning db.enhjørninger.find uden parentes får vi prompten:

Åbn webinar "MongoDB Basics"

Vi fortsætter med at opfylde anmodninger

Der er også $in-operatoren:

db.unicorns.find({weight: {$in: [650, 704]}})

Åbn webinar "MongoDB Basics"

Lad os nu tale om opdatering. Lad os for eksempel ændre vægten af ​​Rooooodles-enhjørningen:

db.unicorns.update({name: "Roooooodles"}, {weight: 2222})

Som et resultat af vores handlinger, dokumentet vil blive fuldstændig opdateret, og kun ét specificeret felt forbliver i det:

Åbn webinar "MongoDB Basics"

Det vil sige, at det eneste, der vil være tilbage for vores objekt, er vægten 2222 og, selvfølgelig, id.

Du kan rette situationen vha $sæt:

db.unicorns.update({_id: ObjectId("5da6ea4d9703b8be0089e6db")}, {$set: { "name" : "Roooooodles", "dob" : ISODate("1979-08-18T18:44:00Z"), "loves" : [ "apple" ], "gender" : "m", "vampires" : 99}})

Åbn webinar "MongoDB Basics"

Det er også muligt øge værdier:

Åbn webinar "MongoDB Basics"

Og det er der også oprøre - kombination af opdatering og indsæt:

Åbn webinar "MongoDB Basics"

Her er hvordan det gøres feltvalg:

Åbn webinar "MongoDB Basics"

Åbn webinar "MongoDB Basics"

Det er tilbage at tilføje et par ord om spring и begrænse:

Åbn webinar "MongoDB Basics"

Kolleger, det er alt, hvis du vil vide detaljerne, se hele videoen. Og glem ikke at efterlade dine kommentarer!

Kilde: www.habr.com

Tilføj en kommentar