Mga kaibigan, isa pang paglulunsad ng kurso
Ginanap ang webinar
Mga Tampok ng MongoDB
MongoDB ay isang open source na DBMS na nakatuon sa dokumento na hindi nangangailangan ng paglalarawan ng schema ng talahanayan. Ito ay inuri bilang NoSQL at gumagamit ng BSON (binary JSON). Nasusukat sa labas ng kahon, nakasulat sa C++ at sumusuporta sa JavaScript syntax. Walang suporta sa SQL.
Ang MongoDB ay may mga driver para sa maraming sikat na programming language (C, C++, C#, Go, Java, JavaScript, Perl, PHP, Python, Ruby, atbp.). Mayroon ding mga hindi opisyal at suportado ng komunidad na mga driver para sa iba pang mga programming language.
Well, tingnan natin ang mga pangunahing utos na maaaring maging kapaki-pakinabang.
Kaya, upang i-deploy ang MongoDB sa Docker, sumusulat kami:
docker run -it --rm -p 127.0.0.1:27017:27017
--name mongo-exp-project mongo
docker exec -it mongo-exp-project mongo
Kaya ito nangyayari paglulunsad ng kliyente MongoDB:
Ngayon isulat natin ang tradisyonal Kamusta Mundo:
print (“Hello world!”)
Pagkatapos - simulan na natin ang cycle:
Tulad ng napansin mo, bago tayo regular na JS, at ang MongoDB ay isang ganap na interpreter ng JavaScript.
Kailan gagamitin ang MongoDB?
May isang kuwento na ang karaniwang startup sa Silicon Valley ay ang taong nagbukas ng aklat na "HTML for Dummies" noong isang linggo. Aling stack ang pipiliin niya? Sumang-ayon na ito ay napaka-maginhawa para sa kanya kapag, para sa malinaw na mga kadahilanan, mayroon siyang JavaScript sa kanyang browser, ang Node.js ay tumatakbo sa server, at ang JavaScript ay tumatakbo din sa database. Ito ang point number 1.
Pangalawa, meron
Pangatlo, nais kong bigyang-diin na ang MongoDB ay nailalarawan ng mabuti scalability - at ito ay isa sa mga pangunahing tampok ng database. Kung hindi mo alam nang maaga kung ano ang magiging load, perpekto ang MongoDB. Bilang karagdagan, sinusuportahan nito ang mga out-of-the-box na pattern tulad ng sharding и pagtitiklop, at ang lahat ng ito ay tapos na medyo transparent, iyon ay, ito ay napaka-maginhawa upang gumana.
tungkol sa terminolohiya sa MongoDB pagkatapos:
- ang mga database ay mga database (mga scheme, mga koleksyon ng mga talahanayan);
- sa MongoDB mayroong isang bagay tulad ng ang koleksyon - ito ay isang analogue ng isang talahanayan at isang hanay ng mga dokumento na, lohikal, ay dapat na konektado;
- ang mga dokumento ay kahalintulad sa isang string.
Paglikha ng database at mga simpleng query
Upang lumikha ng isang database, kailangan mo lamang simulan ang paggamit nito:
use learn
Ngayon gumawa tayo ng isang maliit na insert ng dokumento. Hayaan ito, halimbawa, isang unicorn na may pangalang Aurora:
db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450})
db - isang pandaigdigang bagay para sa pag-access sa database, iyon ay, sa katunayan, ang "monga" mismo. Ginagamit para sa sharding sh, para sa pagtitiklop - rs.
Anong mga utos ang mayroon ang bagay? db:
Kaya, bumalik tayo sa aming utos, bilang isang resulta kung saan iuulat ng console na ang isang linya ay naipasok:
Salita unicorns
sa isang team db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450})
nagsasaad ng koleksyon. Pakitandaan dito na hindi namin inilarawan o ginawa ang koleksyon, ngunit nagsulat lang ng 'unicorn', gumawa ng insert, at mayroon kaming koleksyon.
At ito ay kung paano namin magagawa kunin ang lahat ng aming mga koleksyon:
db.getCollectionNames()
At iba pa. Pwede ipasok ang isa pa koleksyon:
Ngayon tanungin natin kumpletong koleksyon (ipapaalala namin sa iyo na sa aming kaso ang database ay naglalaman na ng impormasyon tungkol sa dalawang unicorn na may parehong pangalan):
db.unicorns.find()
Pakitandaan, narito ang aming JSON (may pangalan, kasarian, timbang, ilang natatanging object identifier):
Ngayon, maglagay tayo ng ilang higit pang unicorn na may parehong mga pangalan:
db.unicorns.insert({name: 'Leto', gender: 'm',
home: 'Arrakeen', worm: false})
db.unicorns.insert({name: 'Leto', gender: 'm',
home: 'Arrakeen', worm: false})
At tingnan natin kung ano ang nangyari:
Gaya ng nakikita mo, mayroon kaming mga karagdagang field: bahay и uod, na wala sa Aurora.
Magdagdag pa tayo ng ilang unicorn:
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}])
Kaya, nagpasok kami ng apat pang bagay gamit ang JavaScript:
Sa iyong opinyon, sa aling mga database mas maginhawang mag-imbak ng data ng pasaporte: relational database o Mongo?
Ang sagot ay halata - sa Monga, at ang halimbawa sa itaas ay nagpapakita ng mabuti. Hindi lihim na ang KLADR ay isang sakit sa Russian Federation. At napakahusay ng Monga sa mga address, dahil maaari mong itakda ang lahat bilang isang array, at magiging mas madali ang buhay. At ito ay isang magandang Kaso ng Gumagamit para sa MongoDB.
Magdagdag pa tayo ng mga unicorn:
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});
Ngayon bigyang-pansin ang mga dokumento. Bilang dob Nag-iimbak kami ng buong mga bagay. Mayroon ding impormasyon tungkol sa kung ano ang gusto ng isang unicorn, at hindi lahat ay may ganitong impormasyon. Kaya sa loob ay kasinungalingan buong hanay.
Sa pamamagitan ng paraan, upang ipakita ang mga resulta nang mas maganda, maaari mong tawagan ang pamamaraan sa dulo ng command sa paghahanap .pretty()
:
Kung kailangan mong makuha impormasyon tungkol sa pinakabagong error, gamitin ang sumusunod na command:
db.getLastError()
Magagawa ito pagkatapos ng bawat pagpapasok, o maaari mong i-configure ang Write Concern. Ito ay mas mahusay na basahin ang tungkol dito sa
Lumipat tayo sa mas kumplikadong mga query
Query para sa eksaktong field value:
db.unicorns.find({gender: 'm'})
Sa pamamagitan ng pagsusulat ng naturang kahilingan, makakatanggap kami ng listahan ng lahat ng male unicorn sa output ng console.
Maaari mo ring gawin query sa ilang field nang sabay-sabay: ayon sa kasarian at timbang:
Sa itaas, bigyang-pansin ang espesyal $gt selector, na nagpapahintulot sa iyo na mag-breed ng lahat ng male unicorn na tumitimbang ng higit sa 700.
Maaari mong suriin umiiral ba ang larangan?:
db.unicorns.find({vampires: {$exists: false}})
O kaya:
db.unicorns.find({'parents.father': {$exists: true}})
Ilalabas ng susunod na koponan ang mga unicorn, na ang mga pangalan ay nagsisimula sa mga titik A o a:
db.unicorns.find({name: {$regex: "^[Aa]"}})
Ngayon isaalang-alang natin paghahanap ng array. Tanong #1: Ano ang ilalabas ng command na ito:
db.unicorns.find({loves:'apple'})
Tama iyan: lahat ng mahilig sa mansanas.
Ang sumusunod na command ay ibabalik lamang ang mga unicorn data na naglalaman mga mansanas at pakwan lamang:
db.unicorns.find({loves:[ "apple", "watermelon" ]})
At isa pang utos:
db.unicorns.find({loves:[ "watermelon", "apple" ]})
Sa aming kaso, hindi ito magbabalik ng anuman, dahil kapag nagpasa kami ng isang array, ang unang elemento ay inihambing sa una, ang pangalawa sa pangalawa, atbp. Iyon ay, ang array ay dapat ding tumugma ayon sa posisyon mga halagang ito.
At ito ang hitsura nito naghahanap sa pamamagitan ng isang array gamit ang operator na "OR".:
Ipapakita sa atin ng sumusunod na halimbawa maghanap gamit ang $all operator. At narito ang pagkakasunud-sunod ay hindi mahalaga:
Kaya rin natin maghanap ayon sa laki ng array:
Ngunit paano kung gusto nating makahanap ng isang array na ang laki ay mas malaki kaysa sa isa? May operator para dito $saan, kung saan maaari kang sumulat ng mas kumplikadong mga bagay:
db.unicorns.find({$where: function() { return this.loves && (this.loves.length > 1) } })
Nga pala, kung gusto mong magsanay,
Mga Tampok ng Cursor
Lumihis tayo ng kaunti at magsabi ng ilang salita tungkol sa mga tampok ng Monga:
- find() at iba pang mga operasyon ay hindi nagbabalik ng data - nagbabalik sila ng tinatawag na "cursor";
- ang katotohanan na nakikita natin ang data na ini-print ay gawa ng interpreter.
Nagta-type db.unicorns.find nang walang panaklong, nakukuha namin ang prompt:
Patuloy naming tinutupad ang mga kahilingan
Mayroon ding $in operator:
db.unicorns.find({weight: {$in: [650, 704]}})
Ngayon pag-usapan natin ang tungkol sa pag-update. Halimbawa, baguhin natin ang bigat ng unicorn ng Roooodles:
db.unicorns.update({name: "Roooooodles"}, {weight: 2222})
Bilang resulta ng aming mga aksyon, ang dokumento ay ganap na maa-update, at isang tinukoy na field lamang ang mananatili dito:
Iyon ay, ang tanging bagay na mananatili para sa aming bagay ay ang timbang 2222 at, siyempre, id.
Maaari mong itama ang sitwasyon gamit ang $set:
db.unicorns.update({_id: ObjectId("5da6ea4d9703b8be0089e6db")}, {$set: { "name" : "Roooooodles", "dob" : ISODate("1979-08-18T18:44:00Z"), "loves" : [ "apple" ], "gender" : "m", "vampires" : 99}})
Pwede rin naman mga dagdag na halaga:
At meron din upsert - kumbinasyon ng update at insert:
Narito kung paano ito ginawa pagpili ng larangan:
Ito ay nananatiling magdagdag ng ilang mga salita tungkol sa laktawan и limitasyon:
Mga kasamahan, iyon lang, kung gusto mong malaman ang mga detalye,
Pinagmulan: www.habr.com