Iepenje webinar "MongoDB Basics"

Freonen, in oare kursus lansearring "Databank" sil moarn plakfine, dus hawwe wy in tradisjonele iepen les hâlden, wêrfan jo de opname kinne besjen hjir. Dizze kear hawwe wy it oer de populêre MongoDB-database: wy studearre guon fan 'e subtiliteiten, seagen nei de basis fan operaasje, mooglikheden en arsjitektuer. Wy hawwe ek guon brûkersgefallen oansprutsen.

Iepenje webinar "MongoDB Basics"

It webinar waard hâlden Ivan Belt, haad fan serverûntwikkeling by Citymobil.

MongoDB Funksjes

MongoDB is in iepen boarne dokumint-rjochte DBMS dy't gjin beskriuwing fan it tabelskema fereasket. It is klassifisearre as NoSQL en brûkt BSON (binêre JSON). Scalable out of the box, skreaun yn C ++ en stipet JavaScript syntaksis. D'r is gjin SQL-stipe.

MongoDB hat bestjoerders foar in protte populêre programmeartalen (C, C++, C#, Go, Java, JavaScript, Perl, PHP, Python, Ruby, ensfh.). D'r binne ek net-offisjele en mienskipsstipe drivers foar oare programmeartalen.

No, litte wy nei de basisopdrachten sjen dy't nuttich kinne wêze.

Dat, om MongoDB yn Docker yn te setten, Wy skriuwe:

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

Sa bart it client lansearring MongoDB:

Iepenje webinar "MongoDB Basics"

Litte wy no de tradisjonele skriuwe Hallo wrâld:

print (“Hello world!”)

Iepenje webinar "MongoDB Basics"

Dêrnei - lit ús de syklus begjinne:

Iepenje webinar "MongoDB Basics"

Sa't jo opfallen, foar ús reguliere JS, en MongoDB is in folweardige JavaSkript-tolk.

Wannear moatte jo MongoDB brûke?

D'r is in ferhaal dat de gemiddelde opstart yn Silicon Valley de persoan is dy't in wike lyn it boek "HTML for Dummies" iepene. Hokker stapel sil hy kieze? It iens dat it is hiel handich foar him as, foar fansels redenen, hy hat JavaSkript yn syn blêder, Node.js rint op de tsjinner, en JavaSkript rint ek yn de databank. Dit is punt nûmer 1.

Twads, der is grutte prestaasje Peter Zaitsev, ien fan 'e bêste databankspesjalisten yn Ruslân. Dêryn fertelt Peter oer MySQL en MongoDB, spesjaal omtinken foar wannear en wat it bêste is om te brûken.

Tredde wol ik beklamje dat MongoDB wurdt karakterisearre troch goed scalability - en dit is ien fan 'e wichtichste skaaimerken fan' e databank. As jo ​​net fan tefoaren witte wat de lading sil wêze, is MongoDB perfekt. Derneist stipet it out-of-the-box patroanen lykas sharding и replikaasje, en dit alles wurdt dien frij transparant, dat is, it is hiel handich om te wurkjen.

Wetter - Agrarwetter terminology yn MongoDB dan:

  • databanken binne databanken (skema's, kolleksjes fan tabellen);
  • yn MongoDB is d'r sa'n ding as in kolleksje - dit is in analoog fan in tabel en in set fan dokuminten dy't, logysk, moatte wurde ferbûn;
  • dokuminten binne analoog oan in tekenrige.

Databank oanmeitsjen en ienfâldige fragen

Om in databank te meitsjen, moatte jo gewoan begjinne mei it brûken:

use learn

Iepenje webinar "MongoDB Basics"

Litte wy no in lyts ynfoegje fan it dokumint meitsje. Lit it bygelyks in ienhoarn wêze mei de namme Aurora:

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

db - in wrâldwide objekt foar tagong ta de databank, dat is, yn feite, de "monga" sels. Wurdt brûkt foar shading sh, foar replikaasje - rs.

Hokker kommando's hat it objekt? db:

Iepenje webinar "MongoDB Basics"

Dat, lit ús weromgean nei ús kommando, as gefolch wêrfan de konsole sil melde dat ien rigel is ynfoege:

Iepenje webinar "MongoDB Basics"

It wurd unicorns yn in team db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450}) jout in kolleksje oan. Tink derom dat wy de kolleksje net beskreaun of makke hawwe, mar gewoan 'unicorns' skreaun hawwe, in ynfoegje hawwe, en wy hienen in kolleksje.

En dit is hoe't wy kinne krije al ús kolleksjes:

db.getCollectionNames()

Ensafuorthinne. Kinne ynfoegje in oar samling:

Iepenje webinar "MongoDB Basics"

Lit ús no freegje folsleine kolleksje (wy herinnerje jo dat yn ús gefal de databank al ynformaasje befettet oer twa ienhoarnen mei deselde namme):

db.unicorns.find()

Tink derom, hjir is ús JSON (d'r is in namme, geslacht, gewicht, wat unike objektidentifikator):

Iepenje webinar "MongoDB Basics"

Litte wy no noch in pear ienhoarnen ynfoegje mei deselde nammen:

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

En lit ús sjen wat der bard is:

Iepenje webinar "MongoDB Basics"

Sa't jo sjen kinne, hawwe wy ekstra fjilden: thús и wjirm, dy't Aurora net hat.

Litte wy in pear mear ienhoarnen tafoegje:

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

Dat, wy hawwe noch fjouwer objekten ynfoege mei JavaScript:

Iepenje webinar "MongoDB Basics"

Yn jo miening, yn hokker databases is it handiger om paspoartgegevens op te slaan: relationele databases of Mongo?

It antwurd is fanselssprekkend - yn Monga, en it boppesteande foarbyld lit dit goed sjen. It is gjin geheime dat KLADR in pine is yn 'e Russyske Federaasje. En Monga past hiel goed mei adressen, om't jo alles kinne ynstelle as in array, en it libben sil folle makliker wêze. En it is in goede ien Brûker Case foar MongoDB.

Litte wy mear ienhoarnen tafoegje:

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

Iepenje webinar "MongoDB Basics"

Jou no omtinken oan de dokuminten. As tromme Wy bewarje hiele objekten. D'r is ek ynformaasje oer wat in ienhoarn liket, en net elkenien hat dizze ynformaasje. Sa binnen leit folsleine array.

Trouwens, om de resultaten moaier wer te jaan, kinne jo de metoade neame oan 'e ein fan it sykkommando .pretty():

Iepenje webinar "MongoDB Basics"

As jo ​​moatte krije ynformaasje oer de lêste flater, brûk it folgjende kommando:

db.getLastError()

Dit kin dien wurde nei eltse ynfoegje, of jo kinne ynstelle Write Concern. It is better om te lêzen oer it yn offisjele dokumintaasje, dy't trouwens tige ynformatyf is yn Monga. Trouwens, it is ek beskikber op Habré goed artikel oer dit.

Litte wy trochgean nei mear komplekse fragen

Query foar krekte fjildwearde:

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

Troch sa'n fersyk te skriuwen, krije wy in list mei alle manlike ienhoarnen yn 'e konsole-útfier.

Jo kinne ek dwaan query op ferskate fjilden tagelyk: troch geslacht en troch gewicht:

Iepenje webinar "MongoDB Basics"

Boppe, betelje omtinken oan de spesjale $gt kiezer, wêrtroch jo alle manlike ienhoarnen kinne fokken dy't mear as 700 weagje.

Jo kinne kontrolearje bestiet it fjild hielendal?:

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

Of sa:

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

It folgjende team sil de ienhoarnen útbringe, waans nammen begjinne mei de letters A of a:

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

No litte wy beskôgje array sykje. Fraach #1: Wat sil dit kommando útfiere:

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

Dat kloppet: elkenien dy't fan appels hâldt.

It folgjende kommando sil allinich de ienhoarngegevens weromjaan dy't befetsje allinnich apels en watermeloenen:

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

En noch ien kommando:

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

Yn ús gefal sil it neat werombringe, want as wy in array passe, wurdt it earste elemint fergelike mei it earste, it twadde mei it twadde, ensfh. Dat is, de array moat ek oerienkomme troch posysje dizze wearden.

En dit is wat it liket sykje troch in array mei de operator "OR".:

Iepenje webinar "MongoDB Basics"

It folgjende foarbyld sil ús sjen litte sykje mei $all operator. En hjir is de folchoarder net wichtich:

Iepenje webinar "MongoDB Basics"

Ek kinne wy sykje op arraygrutte:

Iepenje webinar "MongoDB Basics"

Mar wat as wy in array wolle fine wêrfan de grutte grutter is dan ien? D'r is in operator foar dit $wêr, wêrmei jo mear komplekse dingen skriuwe kinne:

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

Trouwens, as jo wolle oefenje, dêr bisto triem mei kommando's.

Cursor Features

Litte wy in bytsje ôfwike en in pear wurden sizze oer de funksjes fan Monga:

  • find () en oare operaasjes jouwe gjin gegevens werom - se jouwe in saneamde "cursor" werom;
  • it feit dat wy sjogge de gegevens wurde printe is it wurk fan de tolk.

Typearjen db.unicorns.find sûnder haakjes krije wy de prompt:

Iepenje webinar "MongoDB Basics"

Wy bliuwe fersiken ferfolje

D'r is ek de $in operator:

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

Iepenje webinar "MongoDB Basics"

Litte wy no prate oer update. Litte wy bygelyks it gewicht fan 'e Rooooodles-ienhoarn feroarje:

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

As gefolch fan ús aksjes, it dokumint sil folslein bywurke wurde, en mar ien spesifisearre fjild sil deryn bliuwe:

Iepenje webinar "MongoDB Basics"

Dat is, it ienige ding dat bliuwt foar ús objekt is it gewicht 2222 en, fansels, id.

Jo kinne de situaasje korrigearje mei $set:

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

Iepenje webinar "MongoDB Basics"

Der is ek in mooglikheid increment wearden:

Iepenje webinar "MongoDB Basics"

En der is ek upsert - kombinaasje fan fernijing en ynfoegje:

Iepenje webinar "MongoDB Basics"

Hjir is hoe't it dien wurdt fjild seleksje:

Iepenje webinar "MongoDB Basics"

Iepenje webinar "MongoDB Basics"

It bliuwt te foegjen in pear wurden oer oerslaan и limyt:

Iepenje webinar "MongoDB Basics"

Kollega's, dat is alles, as jo de details witte wolle, sjoch de hiele fideo. En ferjit net om jo opmerkingen efter te litten!

Boarne: www.habr.com

Add a comment