"MongoDB Basics" вебинарыг нээх

Найзууд аа, дахин нэг курс нээлтээ хийлээ "Мэдээллийн сан" маргааш болох тул бид уламжлалт нээлттэй хичээлийг зохион байгуулсан бөгөөд бичлэгийг нь үзэх боломжтой энд. Энэ удаад бид алдартай MongoDB мэдээллийн сангийн талаар ярилцлаа: бид зарим нарийн ширийн зүйлийг судалж, үйл ажиллагааны үндэс, чадвар, архитектурыг харлаа. Бид мөн зарим хэрэглэгчийн кейсийг хөндсөн.

"MongoDB Basics" вебинарыг нээх

Вебинар боллоо Иван бүс, Citymobil дахь сервер хөгжүүлэлтийн дарга.

MongoDB-ийн онцлогууд

МонгоБ Хүснэгтийн схемийн тайлбарыг шаарддаггүй нээлттэй эхийн баримт бичигт чиглэсэн DBMS юм. Үүнийг NoSQL гэж ангилдаг бөгөөд BSON (binary JSON) ашигладаг. С++ хэл дээр бичигдсэн, JavaScript-н синтаксийг дэмждэг. SQL дэмжлэг байхгүй.

MongoDB нь олон алдартай програмчлалын хэлнүүдийн драйверуудтай (C, C++, C#, Go, Java, JavaScript, Perl, PHP, Python, Ruby гэх мэт). Мөн бусад програмчлалын хэлнүүдэд зориулсан албан бус болон олон нийтийн дэмжлэгтэй драйверууд байдаг.

За, хэрэгтэй байж болох үндсэн командуудыг харцгаая.

Тиймээс, MongoDB-г Docker дээр байрлуулах, бид бичдэг:

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

Ийм зүйл болдог үйлчлүүлэгч нээх MongoDB:

"MongoDB Basics" вебинарыг нээх

Одоо уламжлалт нэгийг нь бичье Сайн уу:

print (“Hello world!”)

"MongoDB Basics" вебинарыг нээх

Үүний дараа - циклийг эхлүүлье:

"MongoDB Basics" вебинарыг нээх

Таны анзаарснаар бидний өмнө ердийн JS, MongoDB нь бүрэн хэмжээний JavaScript орчуулагч юм.

MongoDB хэзээ ашиглах вэ?

Долоо хоногийн өмнө “HTML for Dummies” номыг нээсэн хүн Цахиурын хөндийн дундаж стартап байдаг гэсэн түүх бий. Тэр аль стекийг сонгох вэ? Тодорхой шалтгааны улмаас түүний хөтөч дээр JavaScript байгаа, сервер дээр Node.js, мөн мэдээллийн санд JavaScript ажиллаж байгаа үед энэ нь түүнд маш тохиромжтой гэдгийг хүлээн зөвшөөрч байна. Энэ бол 1-р цэг юм.

Хоёрдугаарт, байдаг гайхалтай гүйцэтгэл Петр Зайцев бол Оросын мэдээллийн сангийн шилдэг мэргэжилтнүүдийн нэг юм. Үүнд Питер MySQL болон MongoDB-ийн талаар ярьж, хэзээ, юуг ашиглах нь дээр вэ гэдэгт онцгой анхаарал хандуулдаг.

Гуравдугаарт, MongoDB нь сайн талтай гэдгийг онцлон хэлмээр байна өргөтгөх чадвар - мөн энэ нь мэдээллийн сангийн гол шинж чанаруудын нэг юм. Хэрэв та ачаалал ямар байхыг урьдчилан мэдэхгүй бол MongoDB төгс төгөлдөр юм. Нэмж дурдахад энэ нь бэлэн загваруудыг дэмждэг хуваах и хуулбарлах, мөн энэ бүхэн нэлээд ил тод хийгдсэн, өөрөөр хэлбэл ажиллахад маш тохиромжтой.

Тухайд нэр томъёо MongoDB дээр дараа нь:

  • мэдээллийн сан нь мэдээллийн сан (схем, хүснэгтийн цуглуулга);
  • MongoDB дээр ийм зүйл байдаг Цуглуулга - энэ бол логикийн хувьд холбогдсон байх ёстой хүснэгт ба баримт бичгийн багцын аналог юм;
  • баримтууд нь мөртэй төстэй.

Өгөгдлийн сан үүсгэх, энгийн асуулга

Өгөгдлийн сан үүсгэхийн тулд та үүнийг ашиглаж эхлэх хэрэгтэй:

use learn

"MongoDB Basics" вебинарыг нээх

Одоо баримт бичгийн жижиг оруулга хийцгээе. Жишээлбэл, Аврора нэртэй ганц эвэрт шувуу байг.

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

db - мэдээллийн санд хандах дэлхийн объект, өөрөөр хэлбэл "монга" өөрөө. Хуваахад ашигладаг sh, хуулбарлахын тулд - rs.

Объект ямар тушаалуудтай вэ? db:

"MongoDB Basics" вебинарыг нээх

Тиймээс, команд руугаа буцаж орцгооё, үүний үр дүнд консол нэг мөр оруулсан тухай мэдээлэх болно.

"MongoDB Basics" вебинарыг нээх

Үг unicorns багт db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450}) цуглуулгыг илэрхийлдэг. Энд бид цуглуулгыг дүрсэлж, бүтээгээгүй, зүгээр л "дан эвэрт" гэж бичээд, оруулга хийж, цуглуулгатай болсныг анхаарна уу.

Тэгээд бид ингэж чадна Манай бүх цуглуулгыг аваарай:

db.getCollectionNames()

гэх мэт. Чадах өөр нэгийг оруулах цуглуулга:

"MongoDB Basics" вебинарыг нээх

Одоо асууя бүрэн цуглуулга (Манай тохиолдолд мэдээллийн санд ижил нэртэй хоёр ганц эвэртний тухай мэдээлэл аль хэдийн орсон байгааг бид танд сануулж байна):

db.unicorns.find()

Энд манай JSON байгааг анхаарна уу (нэр, хүйс, жин, өвөрмөц объект танигч байдаг):

"MongoDB Basics" вебинарыг нээх

Одоо ижил нэртэй хэд хэдэн ганц эвэртүүдийг оруулъя:

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

Тэгээд юу болсныг харцгаая:

"MongoDB Basics" вебинарыг нээх

Таны харж байгаагаар бидэнд нэмэлт талбарууд байна: Нүүр хуудас и өт, Аврорад байхгүй.

Өөр хэдэн ганц эвэртийг нэмье:

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

Тиймээс, бид JavaScript ашиглан дахин дөрвөн объект оруулсан:

"MongoDB Basics" вебинарыг нээх

Таны бодлоор паспортын мэдээллийг аль мэдээллийн санд хадгалах нь илүү тохиромжтой вэ: харилцааны мэдээллийн сан эсвэл Mongo?

Хариулт нь ойлгомжтой - Монгад, дээрх жишээ үүнийг сайн харуулж байна. KLADR бол ОХУ-ын хувьд өвддөг нь нууц биш юм. Мөн Monga нь хаягтай маш сайн тохирдог, учир нь та бүх зүйлийг массив болгон тохируулах боломжтой бөгөөд амьдрал илүү хялбар болно. Мөн энэ нь сайн юм MongoDB-ийн хэрэглэгчийн кейс.

Өөр ганц эвэртүүдийг нэмье:

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

"MongoDB Basics" вебинарыг нээх

Одоо баримт бичигт анхаарлаа хандуулаарай. гэх мэт бөмбөр Бид бүхэл бүтэн объектуудыг хадгалдаг. Ганц эвэртэнд юу дуртай вэ гэсэн мэдээлэл бас байдаг бөгөөд хүн бүр ийм мэдээлэлтэй байдаггүй. Тэгэхээр дотроо худлаа бүрэн массив.

Дашрамд хэлэхэд, үр дүнг илүү сайхан харуулахын тулд хайлтын командын төгсгөлд байгаа аргыг дуудаж болно .pretty():

"MongoDB Basics" вебинарыг нээх

Хэрэв та авах шаардлагатай бол хамгийн сүүлийн алдааны талаарх мэдээлэл, дараах тушаалыг ашиглана уу:

db.getLastError()

Үүнийг оруулах бүрийн дараа хийж болно, эсвэл та санаа зовох зүйл бичих тохиргоог хийж болно. Энэ талаар уншсан нь дээр албан ёсны баримт бичиг, дашрамд хэлэхэд, энэ нь Monga-д маш их мэдээлэл өгдөг. Дашрамд хэлэхэд, энэ нь Habré дээр бас байдаг сайн нийтлэл энэ талаар.

Илүү төвөгтэй асуултууд руу шилжье

Яг талбарын утгыг асуух:

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

Ийм хүсэлтийг бичснээр бид консолын гаралтын бүх эрэгтэй ганц эвэртний жагсаалтыг хүлээн авах болно.

Та бас хийж болно хэд хэдэн талбар дээр нэгэн зэрэг асуулга: хүйс, жингээр:

"MongoDB Basics" вебинарыг нээх

Дээр дурдсан зүйлд анхаарлаа хандуулаарай $gt сонгогч, энэ нь 700-аас дээш жинтэй бүх эрэгтэй ганц эвэртүүдийг үржүүлэх боломжийг олгодог.

Та шалгаж болно талбай ерөөсөө байдаг уу?:

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

Эсвэл:

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

Дараагийн баг нь ганц эвэртүүдийг гаргаж ирнэ. нэр нь А эсвэл а үсгээр эхэлсэн:

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

Одоо авч үзье массив хайх. Асуулт №1: Энэ тушаалаас юу гарах вэ:

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

Энэ нь зөв: алимд дуртай хүн бүр.

Дараах тушаал нь зөвхөн ганц эвэртний өгөгдлийг агуулсан өгөгдлийг буцаана зөвхөн алим, тарвас:

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

Бас нэг тушаал:

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

Манай тохиолдолд энэ нь юу ч буцаахгүй, учир нь бид массивыг дамжуулахад эхний элементийг эхнийхтэй, хоёр дахь нь хоёр дахь элементтэй харьцуулдаг. Өөрөөр хэлбэл массив нь мөн таарч байх ёстой. албан тушаалаар эдгээр үнэт зүйлс.

Мөн энэ нь иймэрхүү харагдаж байна "OR" оператор ашиглан массиваар хайх:

"MongoDB Basics" вебинарыг нээх

Дараах жишээ бидэнд харуулах болно $all операторыг ашиглан хай. Энд дараалал нь чухал биш юм:

"MongoDB Basics" вебинарыг нээх

Бид ч бас чадна массивын хэмжээгээр хайх:

"MongoDB Basics" вебинарыг нээх

Гэхдээ бид хэмжээ нь нэгээс их массив олохыг хүсвэл яах вэ? Үүний тулд оператор байдаг $хаана, үүний тусламжтайгаар та илүү төвөгтэй зүйлсийг бичиж болно:

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

Дашрамд хэлэхэд, хэрэв та дасгал хийхийг хүсч байвал Та тэнд байна тушаал бүхий файл.

Курсорын онцлог

Жаахан ухарч, Монгагийн онцлогуудын талаар хэдэн үг хэлье.

  • find() болон бусад үйлдлүүд өгөгдөл буцаахгүй - тэд "курсор" гэж нэрлэгддэг зүйлийг буцаана;
  • Бид хэвлэж буй өгөгдлийг харж байгаа нь орчуулагчийн ажил юм.

Бичих db.unicorns.find Хаалтгүйгээр бид дараах тушаалыг авна.

"MongoDB Basics" вебинарыг нээх

Бид хүсэлтийг үргэлжлүүлэн биелүүлсээр байна

Мөн $in оператор байдаг:

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

"MongoDB Basics" вебинарыг нээх

Одоо шинэчлэлтийн талаар ярилцъя. Жишээлбэл, Rooooodles ганц эвэртний жинг өөрчилье:

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

Бидний үйл ажиллагааны үр дүнд баримт бичиг бүрэн шинэчлэгдэх болно, зөвхөн нэг заасан талбарт үлдэх болно:

"MongoDB Basics" вебинарыг нээх

Энэ нь бидний объектод үлдэх цорын ганц зүйл бол 2222 жин бөгөөд мэдээжийн хэрэг ID юм.

Та нөхцөл байдлыг ашиглан засч залруулж болно $ багц:

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

"MongoDB Basics" вебинарыг нээх

Энэ нь бас боломжтой утгыг нэмэгдүүлэх:

"MongoDB Basics" вебинарыг нээх

Мөн бас байдаг дээшээ - шинэчлэлт ба оруулах хослол:

"MongoDB Basics" вебинарыг нээх

Үүнийг хэрхэн хийснийг энд харуулав талбайн сонголт:

"MongoDB Basics" вебинарыг нээх

"MongoDB Basics" вебинарыг нээх

Энэ талаар хэдэн үг нэмэхэд л үлдлээ алгасах и хязгаар:

"MongoDB Basics" вебинарыг нээх

Хамтран ажиллагсад аа, хэрэв та нарийн ширийнийг мэдэхийг хүсвэл энэ нь хангалттай. видеог бүхэлд нь үзээрэй. Мөн сэтгэгдлээ үлдээхээ бүү мартаарай!

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх