Найзууд аа, дахин нэг курс нээлтээ хийлээ
Вебинар боллоо
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:
Одоо уламжлалт нэгийг нь бичье Сайн уу:
print (“Hello world!”)
Үүний дараа - циклийг эхлүүлье:
Таны анзаарснаар бидний өмнө ердийн JS, MongoDB нь бүрэн хэмжээний JavaScript орчуулагч юм.
MongoDB хэзээ ашиглах вэ?
Долоо хоногийн өмнө “HTML for Dummies” номыг нээсэн хүн Цахиурын хөндийн дундаж стартап байдаг гэсэн түүх бий. Тэр аль стекийг сонгох вэ? Тодорхой шалтгааны улмаас түүний хөтөч дээр JavaScript байгаа, сервер дээр Node.js, мөн мэдээллийн санд JavaScript ажиллаж байгаа үед энэ нь түүнд маш тохиромжтой гэдгийг хүлээн зөвшөөрч байна. Энэ бол 1-р цэг юм.
Хоёрдугаарт, байдаг
Гуравдугаарт, MongoDB нь сайн талтай гэдгийг онцлон хэлмээр байна өргөтгөх чадвар - мөн энэ нь мэдээллийн сангийн гол шинж чанаруудын нэг юм. Хэрэв та ачаалал ямар байхыг урьдчилан мэдэхгүй бол MongoDB төгс төгөлдөр юм. Нэмж дурдахад энэ нь бэлэн загваруудыг дэмждэг хуваах и хуулбарлах, мөн энэ бүхэн нэлээд ил тод хийгдсэн, өөрөөр хэлбэл ажиллахад маш тохиромжтой.
Тухайд нэр томъёо MongoDB дээр дараа нь:
- мэдээллийн сан нь мэдээллийн сан (схем, хүснэгтийн цуглуулга);
- MongoDB дээр ийм зүйл байдаг Цуглуулга - энэ бол логикийн хувьд холбогдсон байх ёстой хүснэгт ба баримт бичгийн багцын аналог юм;
- баримтууд нь мөртэй төстэй.
Өгөгдлийн сан үүсгэх, энгийн асуулга
Өгөгдлийн сан үүсгэхийн тулд та үүнийг ашиглаж эхлэх хэрэгтэй:
use learn
Одоо баримт бичгийн жижиг оруулга хийцгээе. Жишээлбэл, Аврора нэртэй ганц эвэрт шувуу байг.
db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450})
db - мэдээллийн санд хандах дэлхийн объект, өөрөөр хэлбэл "монга" өөрөө. Хуваахад ашигладаг sh, хуулбарлахын тулд - rs.
Объект ямар тушаалуудтай вэ? db:
Тиймээс, команд руугаа буцаж орцгооё, үүний үр дүнд консол нэг мөр оруулсан тухай мэдээлэх болно.
Үг unicorns
багт db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450})
цуглуулгыг илэрхийлдэг. Энд бид цуглуулгыг дүрсэлж, бүтээгээгүй, зүгээр л "дан эвэрт" гэж бичээд, оруулга хийж, цуглуулгатай болсныг анхаарна уу.
Тэгээд бид ингэж чадна Манай бүх цуглуулгыг аваарай:
db.getCollectionNames()
гэх мэт. Чадах өөр нэгийг оруулах цуглуулга:
Одоо асууя бүрэн цуглуулга (Манай тохиолдолд мэдээллийн санд ижил нэртэй хоёр ганц эвэртний тухай мэдээлэл аль хэдийн орсон байгааг бид танд сануулж байна):
db.unicorns.find()
Энд манай JSON байгааг анхаарна уу (нэр, хүйс, жин, өвөрмөц объект танигч байдаг):
Одоо ижил нэртэй хэд хэдэн ганц эвэртүүдийг оруулъя:
db.unicorns.insert({name: 'Leto', gender: 'm',
home: 'Arrakeen', worm: false})
db.unicorns.insert({name: 'Leto', gender: 'm',
home: 'Arrakeen', worm: false})
Тэгээд юу болсныг харцгаая:
Таны харж байгаагаар бидэнд нэмэлт талбарууд байна: Нүүр хуудас и өт, Аврорад байхгүй.
Өөр хэдэн ганц эвэртийг нэмье:
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 ашиглан дахин дөрвөн объект оруулсан:
Таны бодлоор паспортын мэдээллийг аль мэдээллийн санд хадгалах нь илүү тохиромжтой вэ: харилцааны мэдээллийн сан эсвэл 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});
Одоо баримт бичигт анхаарлаа хандуулаарай. гэх мэт бөмбөр Бид бүхэл бүтэн объектуудыг хадгалдаг. Ганц эвэртэнд юу дуртай вэ гэсэн мэдээлэл бас байдаг бөгөөд хүн бүр ийм мэдээлэлтэй байдаггүй. Тэгэхээр дотроо худлаа бүрэн массив.
Дашрамд хэлэхэд, үр дүнг илүү сайхан харуулахын тулд хайлтын командын төгсгөлд байгаа аргыг дуудаж болно .pretty()
:
Хэрэв та авах шаардлагатай бол хамгийн сүүлийн алдааны талаарх мэдээлэл, дараах тушаалыг ашиглана уу:
db.getLastError()
Үүнийг оруулах бүрийн дараа хийж болно, эсвэл та санаа зовох зүйл бичих тохиргоог хийж болно. Энэ талаар уншсан нь дээр
Илүү төвөгтэй асуултууд руу шилжье
Яг талбарын утгыг асуух:
db.unicorns.find({gender: 'm'})
Ийм хүсэлтийг бичснээр бид консолын гаралтын бүх эрэгтэй ганц эвэртний жагсаалтыг хүлээн авах болно.
Та бас хийж болно хэд хэдэн талбар дээр нэгэн зэрэг асуулга: хүйс, жингээр:
Дээр дурдсан зүйлд анхаарлаа хандуулаарай $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" оператор ашиглан массиваар хайх:
Дараах жишээ бидэнд харуулах болно $all операторыг ашиглан хай. Энд дараалал нь чухал биш юм:
Бид ч бас чадна массивын хэмжээгээр хайх:
Гэхдээ бид хэмжээ нь нэгээс их массив олохыг хүсвэл яах вэ? Үүний тулд оператор байдаг $хаана, үүний тусламжтайгаар та илүү төвөгтэй зүйлсийг бичиж болно:
db.unicorns.find({$where: function() { return this.loves && (this.loves.length > 1) } })
Дашрамд хэлэхэд, хэрэв та дасгал хийхийг хүсч байвал
Курсорын онцлог
Жаахан ухарч, Монгагийн онцлогуудын талаар хэдэн үг хэлье.
- find() болон бусад үйлдлүүд өгөгдөл буцаахгүй - тэд "курсор" гэж нэрлэгддэг зүйлийг буцаана;
- Бид хэвлэж буй өгөгдлийг харж байгаа нь орчуулагчийн ажил юм.
Бичих db.unicorns.find Хаалтгүйгээр бид дараах тушаалыг авна.
Бид хүсэлтийг үргэлжлүүлэн биелүүлсээр байна
Мөн $in оператор байдаг:
db.unicorns.find({weight: {$in: [650, 704]}})
Одоо шинэчлэлтийн талаар ярилцъя. Жишээлбэл, Rooooodles ганц эвэртний жинг өөрчилье:
db.unicorns.update({name: "Roooooodles"}, {weight: 2222})
Бидний үйл ажиллагааны үр дүнд баримт бичиг бүрэн шинэчлэгдэх болно, зөвхөн нэг заасан талбарт үлдэх болно:
Энэ нь бидний объектод үлдэх цорын ганц зүйл бол 2222 жин бөгөөд мэдээжийн хэрэг ID юм.
Та нөхцөл байдлыг ашиглан засч залруулж болно $ багц:
db.unicorns.update({_id: ObjectId("5da6ea4d9703b8be0089e6db")}, {$set: { "name" : "Roooooodles", "dob" : ISODate("1979-08-18T18:44:00Z"), "loves" : [ "apple" ], "gender" : "m", "vampires" : 99}})
Энэ нь бас боломжтой утгыг нэмэгдүүлэх:
Мөн бас байдаг дээшээ - шинэчлэлт ба оруулах хослол:
Үүнийг хэрхэн хийснийг энд харуулав талбайн сонголт:
Энэ талаар хэдэн үг нэмэхэд л үлдлээ алгасах и хязгаар:
Хамтран ажиллагсад аа, хэрэв та нарийн ширийнийг мэдэхийг хүсвэл энэ нь хангалттай.
Эх сурвалж: www.habr.com