Open webinar "MongoDB Basis"

Vrienden, weer een cursuslancering "Database" vindt morgen plaats, dus hielden we een traditionele open les, waarvan je de opname kunt bekijken hier. Deze keer hadden we het over de populaire MongoDB-database: we bestudeerden enkele subtiliteiten, keken naar de basisprincipes van de bediening, mogelijkheden en architectuur. We hebben ook enkele gebruikerscases besproken.

Open webinar "MongoDB Basis"

Het webinar is gehouden Ivan-riem, hoofd serverontwikkeling bij Citymobil.

MongoDB-functies

MongoDB is een open source documentgeoriënteerd DBMS waarvoor geen beschrijving van het tabelschema vereist is. Het is geclassificeerd als NoSQL en maakt gebruik van BSON (binaire JSON). Out-of-the-box schaalbaar, geschreven in C++ en ondersteunt JavaScript-syntaxis. Er is geen SQL-ondersteuning.

MongoDB heeft stuurprogramma's voor veel populaire programmeertalen (C, C++, C#, Go, Java, JavaScript, Perl, PHP, Python, Ruby, etc.). Er zijn ook niet-officiële en door de gemeenschap ondersteunde stuurprogramma's voor andere programmeertalen.

Laten we eens kijken naar de basiscommando's die nuttig kunnen zijn.

Dus om MongoDB in Docker te implementeren, we schrijven:

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

Zo gebeurt het lancering van een klant MongoDB:

Open webinar "MongoDB Basis"

Laten we nu de traditionele schrijven Hallo Wereld:

print (“Hello world!”)

Open webinar "MongoDB Basis"

Daarna - laten we de cyclus starten:

Open webinar "MongoDB Basis"

Zoals je gemerkt hebt, vóór ons gewone JS, en MongoDB is een volwaardige JavaScript-interpreter.

Wanneer MongoDB gebruiken?

Er gaat een verhaal dat de gemiddelde startup in Silicon Valley degene is die een week geleden het boek ‘HTML for Dummies’ opende. Welke stapel zal hij kiezen? Ben het ermee eens dat het erg handig voor hem is als hij, om voor de hand liggende redenen, JavaScript in zijn browser heeft, Node.js op de server draait en JavaScript ook in de database draait. Dit is punt nummer 1.

Ten tweede is er Goed optreden Peter Zaitsev, een van de beste databasespecialisten in Rusland. Daarin vertelt Peter over MySQL en MongoDB, waarbij hij speciale aandacht besteedt aan wanneer en wat je het beste kunt gebruiken.

Ten derde zou ik willen benadrukken dat MongoDB wordt gekenmerkt door goed schaalbaarheid - en dit is een van de belangrijkste kenmerken van de database. Als je van tevoren niet weet wat de belasting zal zijn, is MongoDB perfect. Bovendien ondersteunt het kant-en-klare patronen zoals scherven и replicatie, en dit alles gebeurt vrij transparant, dat wil zeggen dat het erg handig is om te werken.

ten opzichte van terminologie in MongoDB dan:

  • databases zijn databases (schema's, verzamelingen tabellen);
  • in MongoDB bestaat er zoiets als коллекция - dit is een analoog van een tabel en een reeks documenten die logischerwijs met elkaar verbonden zouden moeten zijn;
  • documenten zijn analoog aan een string.

Databasecreatie en eenvoudige query's

Om een ​​database te maken, hoeft u deze alleen maar te gebruiken:

use learn

Open webinar "MongoDB Basis"

Laten we nu een kleine bijlage van het document maken. Laat het bijvoorbeeld een eenhoorn zijn genaamd Aurora:

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

db - een globaal object voor toegang tot de database, dat wil zeggen in feite de “monga” zelf. Gebruikt voor scherven sh, voor replicatie - rs.

Welke commando's heeft het object? db:

Open webinar "MongoDB Basis"

Laten we dus terugkeren naar onze opdracht, waardoor de console zal melden dat er één regel is ingevoegd:

Open webinar "MongoDB Basis"

Woord unicorns in een team db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450}) duidt op een verzameling. Houd er rekening mee dat we de collectie niet hebben beschreven of gemaakt, maar simpelweg ‘eenhoorns’ hebben geschreven, een tussenvoegsel hebben gemaakt en we hadden een collectie.

En dit is hoe wij dat kunnen bekijk al onze collecties:

db.getCollectionNames()

Enzovoort. Kan plaats er nog een verzameling:

Open webinar "MongoDB Basis"

Laten we het nu vragen volledige collectie (we herinneren je eraan dat in ons geval de database al informatie bevat over twee eenhoorns met dezelfde naam):

db.unicorns.find()

Let op, hier is onze JSON (er is een naam, geslacht, gewicht, een unieke object-ID):

Open webinar "MongoDB Basis"

Laten we nu nog een paar eenhoorns met dezelfde namen invoegen:

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

En laten we eens kijken wat er gebeurde:

Open webinar "MongoDB Basis"

Zoals u kunt zien, hebben we extra velden: home и worm, die Aurora niet heeft.

Laten we nog een paar eenhoorns toevoegen:

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

Daarom hebben we nog vier objecten ingevoegd met behulp van JavaScript:

Open webinar "MongoDB Basis"

In welke databases is het volgens u handiger om paspoortgegevens op te slaan: relationele databases of Mongo?

Het antwoord ligt voor de hand: in Monga, en het bovenstaande voorbeeld laat dit goed zien. Het is geen geheim dat KLADR een pijnpunt is in de Russische Federatie. En Monga past heel goed bij adressen, omdat je alles als een array kunt instellen, en het leven zal veel eenvoudiger zijn. En het is een goede Gebruikerscase voor MongoDB.

Laten we meer eenhoorns toevoegen:

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

Open webinar "MongoDB Basis"

Let nu op de documenten. Als lancering Wij slaan hele objecten op. Er is ook informatie over waar een eenhoorn van houdt, en niet iedereen heeft deze informatie. Dus innerlijke leugens volledige reeks.

Om de resultaten mooier weer te geven, kun je de methode overigens aan het einde van de zoekopdracht aanroepen .pretty():

Open webinar "MongoDB Basis"

Als je het nodig hebt informatie over de laatste fout, gebruik dan het volgende commando:

db.getLastError()

Dit kan na elke invoeging worden gedaan, of u kunt Write Concern configureren. Het is beter om erover te lezen in officiële documentatie, wat trouwens zeer informatief is in Monga. Het is trouwens ook beschikbaar op Habré goed artikel in dit geval.

Laten we verder gaan met complexere zoekopdrachten

Query voor exacte veldwaarde:

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

Door een dergelijk verzoek te schrijven, ontvangen we een lijst met alle mannelijke eenhoorns in de console-uitvoer.

Je kunt het ook doen vraag op meerdere velden tegelijk: naar geslacht en naar gewicht:

Open webinar "MongoDB Basis"

Let hierboven op het bijzondere $gt-kiezer, waarmee je alle mannelijke eenhoorns kunt fokken die meer dan 700 wegen.

Je kunt controleren Bestaat het veld überhaupt?:

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

Of zo:

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

Het volgende team zal de eenhoorns tevoorschijn halen, wiens naam begint met de letters A of a:

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

Laten we nu eens overwegen array zoeken. Vraag #1: Wat zal dit commando opleveren:

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

Dat klopt: iedereen die van appels houdt.

De volgende opdracht retourneert alleen de eenhoorngegevens die bevatten alleen appels en watermeloenen:

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

En nog een commando:

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

In ons geval zal het niets retourneren, want wanneer we een array doorgeven, wordt het eerste element vergeleken met het eerste, het tweede met het tweede, enz. Dat wil zeggen dat de array ook moet overeenkomen op positie deze waarden.

En dit is hoe het eruit ziet zoeken door een array met behulp van de operator "OR".:

Open webinar "MongoDB Basis"

Het volgende voorbeeld zal het ons laten zien zoeken met de operator $all. En hier is de volgorde onbelangrijk:

Open webinar "MongoDB Basis"

Ook wij kunnen dat zoeken op arraygrootte:

Open webinar "MongoDB Basis"

Maar wat als we een array willen vinden waarvan de grootte groter is dan één? Hiervoor bestaat een operator $waar, waarmee je complexere dingen kunt schrijven:

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

Trouwens, als je wilt oefenen, daar ben je bestand met opdrachten.

Cursorfuncties

Laten we een beetje afdwalen en een paar woorden zeggen over de kenmerken van Monga:

  • find() en andere bewerkingen retourneren geen gegevens - ze retourneren een zogenaamde “cursor”;
  • het feit dat we zien dat de gegevens worden afgedrukt, is het werk van de tolk.

Typen db.unicorns.find zonder haakjes krijgen we de prompt:

Open webinar "MongoDB Basis"

Wij blijven verzoeken vervullen

Er is ook de operator $in:

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

Open webinar "MongoDB Basis"

Laten we het nu hebben over updaten. Laten we bijvoorbeeld het gewicht van de Rooooodles-eenhoorn veranderen:

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

Als gevolg van onze acties is het document zal volledig worden bijgewerkt, en er blijft slechts één opgegeven veld in staan:

Open webinar "MongoDB Basis"

Dat wil zeggen, het enige dat overblijft voor ons object is het gewicht 2222 en natuurlijk id.

U kunt de situatie corrigeren met behulp van $ingesteld:

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

Open webinar "MongoDB Basis"

Het is ook mogelijk waarden verhogen:

Open webinar "MongoDB Basis"

En daar is opperen - combinatie van update en invoeging:

Open webinar "MongoDB Basis"

Hier is hoe het gedaan is veld selectie:

Open webinar "MongoDB Basis"

Open webinar "MongoDB Basis"

Er moeten nog een paar woorden over worden toegevoegd overspringen и begrenzing:

Open webinar "MongoDB Basis"

Collega's, dat is alles, als u de details wilt weten: bekijk de hele video. En vergeet niet om uw opmerkingen achter te laten!

Bron: www.habr.com

Voeg een reactie