Buksan ang webinar na "MongoDB Basics"

Mga kaibigan, isa pang paglulunsad ng kurso "Database" magaganap bukas, kaya nagsagawa kami ng isang tradisyonal na bukas na aralin, ang recording kung saan maaari mong panoorin dito. Sa pagkakataong ito, napag-usapan namin ang tungkol sa sikat na database ng MongoDB: pinag-aralan namin ang ilan sa mga subtleties, tiningnan ang mga pangunahing kaalaman sa pagpapatakbo, mga kakayahan at arkitektura. Binanggit din namin ang ilang Kaso ng Gumagamit.

Buksan ang webinar na "MongoDB Basics"

Ginanap ang webinar Ivan Belt, pinuno ng pag-unlad ng server sa Citymobil.

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:

Buksan ang webinar na "MongoDB Basics"

Ngayon isulat natin ang tradisyonal Kamusta Mundo:

print (“Hello world!”)

Buksan ang webinar na "MongoDB Basics"

Pagkatapos - simulan na natin ang cycle:

Buksan ang webinar na "MongoDB Basics"

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 mahusay na pagganap Peter Zaitsev, isa sa mga pinakamahusay na espesyalista sa database sa Russia. Sa loob nito, pinag-uusapan ni Peter ang MySQL at MongoDB, na binibigyang pansin kung kailan at kung ano ang pinakamahusay na gamitin.

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

Buksan ang webinar na "MongoDB Basics"

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:

Buksan ang webinar na "MongoDB Basics"

Kaya, bumalik tayo sa aming utos, bilang isang resulta kung saan iuulat ng console na ang isang linya ay naipasok:

Buksan ang webinar na "MongoDB Basics"

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:

Buksan ang webinar na "MongoDB Basics"

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):

Buksan ang webinar na "MongoDB Basics"

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:

Buksan ang webinar na "MongoDB Basics"

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:

Buksan ang webinar na "MongoDB Basics"

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

Buksan ang webinar na "MongoDB Basics"

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():

Buksan ang webinar na "MongoDB Basics"

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 opisyal na dokumentasyon, na kung saan ay napaka-kaalaman sa Monga. By the way, available din ito sa Habré magandang artikulo tungkol dito.

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:

Buksan ang webinar na "MongoDB Basics"

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".:

Buksan ang webinar na "MongoDB Basics"

Ipapakita sa atin ng sumusunod na halimbawa maghanap gamit ang $all operator. At narito ang pagkakasunud-sunod ay hindi mahalaga:

Buksan ang webinar na "MongoDB Basics"

Kaya rin natin maghanap ayon sa laki ng array:

Buksan ang webinar na "MongoDB Basics"

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, nandyan ka lang pala file na may mga utos.

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:

Buksan ang webinar na "MongoDB Basics"

Patuloy naming tinutupad ang mga kahilingan

Mayroon ding $in operator:

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

Buksan ang webinar na "MongoDB Basics"

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:

Buksan ang webinar na "MongoDB Basics"

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

Buksan ang webinar na "MongoDB Basics"

Pwede rin naman mga dagdag na halaga:

Buksan ang webinar na "MongoDB Basics"

At meron din upsert - kumbinasyon ng update at insert:

Buksan ang webinar na "MongoDB Basics"

Narito kung paano ito ginawa pagpili ng larangan:

Buksan ang webinar na "MongoDB Basics"

Buksan ang webinar na "MongoDB Basics"

Ito ay nananatiling magdagdag ng ilang mga salita tungkol sa laktawan и limitasyon:

Buksan ang webinar na "MongoDB Basics"

Mga kasamahan, iyon lang, kung gusto mong malaman ang mga detalye, panoorin ang buong video. At huwag kalimutang iwanan ang iyong mga komento!

Pinagmulan: www.habr.com

Magdagdag ng komento