Venner, endnu en kursusstart
Webinaret blev afholdt
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:
Lad os nu skrive den traditionelle Hej Verden:
print (“Hello world!”)
Efter det - lad os starte cyklussen:
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
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
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:
Så lad os vende tilbage til vores kommando, som et resultat af hvilken konsollen vil rapportere, at en linje er blevet indsat:
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:
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):
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:
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:
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});
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()
:
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
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:
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:
Det følgende eksempel vil vise os søg ved hjælp af $all-operatoren. Og her er rækkefølgen ligegyldig:
Det kan vi også søg efter matrixstørrelse:
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,
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:
Vi fortsætter med at opfylde anmodninger
Der er også $in-operatoren:
db.unicorns.find({weight: {$in: [650, 704]}})
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:
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}})
Det er også muligt øge værdier:
Og det er der også oprøre - kombination af opdatering og indsæt:
Her er hvordan det gøres feltvalg:
Det er tilbage at tilføje et par ord om spring и begrænse:
Kolleger, det er alt, hvis du vil vide detaljerne,
Kilde: www.habr.com