Freonen, in oare kursus lansearring
It webinar waard hâlden
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:
Litte wy no de tradisjonele skriuwe Hallo wrâld:
print (“Hello world!”)
Dêrnei - lit ús de syklus begjinne:
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
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
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:
Dat, lit ús weromgean nei ús kommando, as gefolch wêrfan de konsole sil melde dat ien rigel is ynfoege:
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:
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):
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:
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:
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});
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()
:
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
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:
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".:
It folgjende foarbyld sil ús sjen litte sykje mei $all operator. En hjir is de folchoarder net wichtich:
Ek kinne wy sykje op arraygrutte:
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,
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:
Wy bliuwe fersiken ferfolje
D'r is ek de $in operator:
db.unicorns.find({weight: {$in: [650, 704]}})
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:
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}})
Der is ek in mooglikheid increment wearden:
En der is ek upsert - kombinaasje fan fernijing en ynfoegje:
Hjir is hoe't it dien wurdt fjild seleksje:
It bliuwt te foegjen in pear wurden oer oerslaan и limyt:
Kollega's, dat is alles, as jo de details witte wolle,
Boarne: www.habr.com