Maak webinar "MongoDB Basics" oop

Vriende, nog 'n kursus bekendstelling "Databasis" sal môre plaasvind, so ons het 'n tradisionele oop les gehou, waarvan u die opname kan kyk hier. Hierdie keer het ons oor die gewilde MongoDB-databasis gepraat: ons het sommige van die subtiliteite bestudeer, na die basiese beginsels van werking, vermoëns en argitektuur gekyk. Ons het ook 'n paar gebruikersgevalle aangeraak.

Maak webinar "MongoDB Basics" oop

Die webinar is gehou Ivan Belt, hoof van bedienerontwikkeling by Citymobil.

MongoDB-kenmerke

MongoDB is 'n oopbron-dokument-georiënteerde DBBS wat nie 'n beskrywing van die tabelskema vereis nie. Dit word geklassifiseer as NoSQL en gebruik BSON (binêre JSON). Skaalbaar uit die boks, geskryf in C++ en ondersteun JavaScript-sintaksis. Daar is geen SQL-ondersteuning nie.

MongoDB het drywers vir baie gewilde programmeertale (C, C++, C#, Go, Java, JavaScript, Perl, PHP, Python, Ruby, ens.). Daar is ook nie-amptelike en gemeenskapsondersteunde drywers vir ander programmeertale.

Wel, kom ons kyk na die basiese opdragte wat nuttig kan wees.

Dus, om MongoDB in Docker te ontplooi, ons skryf:

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

So gebeur dit kliënt bekendstelling MongoDB:

Maak webinar "MongoDB Basics" oop

Kom ons skryf nou die tradisionele een Hello Wêreld:

print (“Hello world!”)

Maak webinar "MongoDB Basics" oop

Na dit - kom ons begin die siklus:

Maak webinar "MongoDB Basics" oop

Soos jy opgemerk het, voor ons gereelde JS, en MongoDB is 'n volwaardige JavaScript-tolk.

Wanneer om MongoDB te gebruik?

Daar is 'n storie dat die gemiddelde beginner in Silicon Valley die persoon is wat die boek "HTML for Dummies" 'n week gelede oopgemaak het. Watter stapel sal hy kies? Stem saam dat dit vir hom baie gerieflik is as hy om ooglopende redes JavaScript in sy blaaier het, Node.js op die bediener loop en JavaScript ook in die databasis loop. Dit is punt nommer 1.

Tweedens is daar puik prestasie Peter Zaitsev, een van die beste databasisspesialiste in Rusland. Daarin praat Peter oor MySQL en MongoDB, met spesiale aandag aan wanneer en wat die beste is om te gebruik.

Derdens wil ek beklemtoon dat MongoDB gekenmerk word deur goeie skaalbaarheid - en dit is een van die sleutelkenmerke van die databasis. As jy nie vooraf weet wat die vrag gaan wees nie, is MongoDB perfek. Daarbenewens ondersteun dit out-of-the-box patrone soos skeuring и replikasie, en dit alles word redelik deursigtig gedoen, dit wil sê, dit is baie gerieflik om te werk.

Met betrekking tot terminologie in MongoDB dan:

  • databasisse is databasisse (skemas, versamelings van tabelle);
  • in MongoDB is daar so iets soos die versameling - dit is 'n analoog van 'n tabel en 'n stel dokumente wat logies gekoppel moet word;
  • dokumente is analoog aan 'n string.

Databasisskepping en eenvoudige navrae

Om 'n databasis te skep, hoef u dit net te begin gebruik:

use learn

Maak webinar "MongoDB Basics" oop

Kom ons maak nou 'n klein insetsel van die dokument. Laat dit byvoorbeeld 'n eenhoorn met die naam Aurora wees:

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

db - 'n globale voorwerp vir toegang tot die databasis, dit is in werklikheid die "monga" self. Word gebruik vir skeuring sh, vir replikasie - rs.

Watter opdragte het die voorwerp? db:

Maak webinar "MongoDB Basics" oop

Dus, kom ons keer terug na ons opdrag, as gevolg waarvan die konsole sal rapporteer dat een reël ingevoeg is:

Maak webinar "MongoDB Basics" oop

Woord unicorns in 'n span db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450}) dui 'n versameling aan. Neem asseblief hier kennis dat ons nie die versameling beskryf of geskep het nie, maar bloot 'eenhorings' geskryf het, 'n insetsel gedoen het, en ons het 'n versameling gehad.

En dit is hoe ons kan kry al ons versamelings:

db.getCollectionNames()

En so aan. Kan voeg nog een in versameling:

Maak webinar "MongoDB Basics" oop

Nou kom ons vra volledige versameling (ons herinner u daaraan dat die databasis in ons geval reeds inligting bevat oor twee eenhorings met dieselfde naam):

db.unicorns.find()

Neem asseblief kennis, hier is ons JSON (daar is 'n naam, geslag, gewig, een of ander unieke voorwerp identifiseerder):

Maak webinar "MongoDB Basics" oop

Kom ons voeg nou nog 'n paar eenhorings met dieselfde name in:

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

En kom ons kyk wat gebeur het:

Maak webinar "MongoDB Basics" oop

Soos u kan sien, het ons bykomende velde: huis и wurm, wat Aurora nie het nie.

Kom ons voeg nog 'n paar eenhorings by:

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}])

Dus, ons het nog vier voorwerpe ingevoeg met JavaScript:

Maak webinar "MongoDB Basics" oop

Na jou mening, in watter databasisse is dit geriefliker om paspoortdata te stoor: relasionele databasisse of Mongo?

Die antwoord is voor die hand liggend - in Monga, en die voorbeeld hierbo wys dit goed. Dit is geen geheim dat KLADR 'n pyn in die Russiese Federasie is nie. En Monga pas baie goed by adresse, want jy kan alles as 'n skikking stel, en die lewe sal baie makliker wees. En dit is 'n goeie een Gebruikersgeval vir MongoDB.

Kom ons voeg meer eenhorings by:

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});

Maak webinar "MongoDB Basics" oop

Gee nou aandag aan die dokumente. Soos drom Ons stoor hele voorwerpe. Daar is ook inligting oor wat 'n eenhoorn liefhet, en nie almal het hierdie inligting nie. So binne lê volle reeks.

Terloops, om die resultate mooier te vertoon, kan u die metode aan die einde van die soekopdrag noem .pretty():

Maak webinar "MongoDB Basics" oop

As jy nodig het om te kry inligting oor die jongste fout, gebruik die volgende opdrag:

db.getLastError()

Dit kan na elke invoeging gedoen word, of jy kan Write Concern konfigureer. Dit is beter om daaroor te lees in amptelike dokumentasie, wat terloops baie insiggewend in Monga is. Terloops, dit is ook op Habré beskikbaar goeie artikel hieroor.

Kom ons gaan aan na meer komplekse navrae

Navraag vir presiese veldwaarde:

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

Deur so 'n versoek te skryf, sal ons 'n lys van alle manlike eenhorings in die konsole-uitvoer ontvang.

Jy kan ook doen navraag op verskeie velde gelyktydig: volgens geslag en volgens gewig:

Maak webinar "MongoDB Basics" oop

Bo, let op die spesiale $gt-kieser, wat jou toelaat om alle manlike eenhorings te teel wat meer as 700 weeg.

Jy kan kyk bestaan ​​die veld enigsins?:

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

Of so:

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

Die volgende span sal die eenhorings uitbring, wie se name met die letters A of a begin:

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

Kom ons kyk nou na skikking soek. Vraag #1: Wat sal hierdie opdrag uitvoer:

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

Dis reg: almal wat lief is vir appels.

Die volgende opdrag sal slegs daardie eenhoorndata terugstuur wat bevat slegs appels en waatlemoene:

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

En nog 'n opdrag:

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

In ons geval sal dit niks teruggee nie, aangesien wanneer ons 'n skikking verbysteek, die eerste element met die eerste vergelyk word, die tweede met die tweede, ens. Dit wil sê, die skikking moet ook ooreenstem volgens posisie hierdie waardes.

En dit is hoe dit lyk soek deur 'n skikking deur die "OR" operateur te gebruik:

Maak webinar "MongoDB Basics" oop

Die volgende voorbeeld sal ons wys soek met $all-operateur. En hier is die volgorde onbelangrik:

Maak webinar "MongoDB Basics" oop

Ons kan ook soek volgens skikking grootte:

Maak webinar "MongoDB Basics" oop

Maar wat as ons 'n skikking wil vind waarvan die grootte groter as een is? Daar is 'n operateur hiervoor $waar, waarmee jy meer komplekse dinge kan skryf:

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

Terloops, as jy wil oefen, daar is jy lêer met opdragte.

Wyser kenmerke

Kom ons dwaal 'n bietjie af en sê 'n paar woorde oor die kenmerke van Monga:

  • find() en ander bewerkings gee nie data terug nie - hulle gee 'n sogenaamde "wyser" terug;
  • die feit dat ons sien dat die data gedruk word, is die werk van die tolk.

Tik db.eenhorings.vind sonder hakies kry ons die prompt:

Maak webinar "MongoDB Basics" oop

Ons gaan voort om aan versoeke te voldoen

Daar is ook die $in operateur:

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

Maak webinar "MongoDB Basics" oop

Kom ons praat nou oor opdatering. Kom ons verander byvoorbeeld die gewig van die Rooooodles-eenhoorn:

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

As gevolg van ons optrede, die dokument sal heeltemal opgedateer word, en slegs een gespesifiseerde veld sal daarin bly:

Maak webinar "MongoDB Basics" oop

Dit wil sê, die enigste ding wat vir ons voorwerp sal oorbly, is die gewig 2222 en, natuurlik, id.

U kan die situasie regstel deur $stel:

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

Maak webinar "MongoDB Basics" oop

Dit is ook moontlik waardes verhoog:

Maak webinar "MongoDB Basics" oop

En daar is ook opstoot - kombinasie van opdatering en voeg in:

Maak webinar "MongoDB Basics" oop

Hier is hoe dit gedoen word veldkeuse:

Maak webinar "MongoDB Basics" oop

Maak webinar "MongoDB Basics" oop

Dit bly om 'n paar woorde oor by te voeg slaan и beperk:

Maak webinar "MongoDB Basics" oop

Kollegas, dit is al, as jy die besonderhede wil weet, kyk na die hele video. En moenie vergeet om jou kommentaar te gee nie!

Bron: will.com

Voeg 'n opmerking