MongoDB nima va nega kerak

Ma’lumotlar bazasi nima darsida ma’lumot jadvallarda saqlanishini ko’rdingiz: ustunlar oldindan belgilanadi, har qator o’sha ustunlarga bo’ysunadi. Endi tasavvur qiling, do’kon mahsulotlarini saqlayapsiz: kitobda sahifa soni bor, futbolkada esa o’lcham va rang. Bitta jadvalga ikkalasini ham joylash qiyin.

MongoDB aynan shu holat uchun boshqa yo’l taklif qiladi: har yozuv o’z maydonlari bilan alohida saqlanadi.

Muammo: qat’iy ustunlar har doim ham mos kelmaydi

SQL bazasida jadval tuzilishi oldindan e’lon qilinadi. Kitoblar uchun shunday yozgan bo’lardingiz:

CREATE TABLE products (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  price INTEGER NOT NULL,
  pageCount INTEGER
);

Ertaga futbolka qo’shish kerak bo’ldi. Unda pageCount yo’q, lekin size va color bor. Ikki yo’l qoladi:

  1. Jadvalga yana ikki ustun qo’shish — kitob qatorlarida ular bo’sh turadi;
  2. Alohida jadval yaratish — endi mahsulotlar ikki joyda.

Mahsulot turi o’ntaga yetganda birinchi yo’l bo’sh kataklar dengizini, ikkinchisi esa o’nta jadvalni beradi.

MongoDB qanday saqlaydi

MongoDB’da yuqoridagi ikki mahsulot shunday ko’rinadi:

{
  "_id": 1,
  "name": "O'tkan kunlar",
  "price": 45000,
  "pageCount": 384
}
{
  "_id": 2,
  "name": "Futbolka",
  "price": 89000,
  "size": "M",
  "color": "qora"
}

Ikkalasi ham bitta joyda — products kolleksiyasida yotadi. Hech qanday ustun oldindan e’lon qilinmagan, ALTER TABLE ham yozilmagan.

Yozuv JSON ga juda o’xshaydi va bu tasodif emas: MongoDB hujjatlari JSON asosidagi formatda saqlanadi.

Uch atama: baza, kolleksiya, hujjat

MongoDB’da uch qatlam bor. Ularni SQL bilan yonma-yon qo’yamiz:

SQL MongoDB Nima
Baza (database) Baza (database) Butun loyihaning ma’lumoti
Jadval (table) Kolleksiya (collection) Bir turdagi yozuvlar to’plami
Qator (row) Hujjat (document) Bitta yozuv
Ustun (column) Maydon (field) Yozuv ichidagi bitta qiymat
id ustuni _id maydoni Yozuvni ajratuvchi kalit

Nomlar boshqa, mantiq yaqin. Shuning uchun SQL bilganingiz bu yerda yo’qolmaydi — ko’p tushuncha shunchaki boshqacha ataladi.

Schema yo’q — bu nimani anglatadi

MongoDB schema-siz (schemaless) deb ataladi. Bu “qoida yo’q” degani emas, “qoidani baza emas, kod belgilaydi” degani.

Savol SQL MongoDB
Tuzilishni kim tekshiradi Baza Ilova kodi
Yangi maydon qo’shish ALTER TABLE kerak Shunchaki yoziladi
Noto’g’ri maydon nomi Xato beradi Jimgina yoziladi
Bo’sh maydon NULL saqlanadi Maydon umuman yo’q

Uchinchi qator — erkinlikning narxi.

Bog’langan ma’lumot: JOIN o’rniga joylash

SQL’da buyurtma va mijoz ikki jadvalda turadi, JOIN ular bog’laydi. MongoDB’da ko’pincha boshqa yo’l tanlanadi — bog’liq ma’lumot hujjatning ichiga joylashtiriladi:

{
  "_id": 1,
  "total": 134000,
  "customer": {
    "name": "Aziz Karimov",
    "phone": "+998901234567"
  },
  "items": [
    { "name": "O'tkan kunlar", "quantity": 1, "price": 45000 },
    { "name": "Futbolka", "quantity": 1, "price": 89000 }
  ]
}

Bitta o’qish — butun buyurtma qo’lingizda. Uchta jadvalni birlashtirish kerak emas.

Bu yondashuv doim yaxshi degani emas. Mijoz telefoni o’zgarsa, uni har bir buyurtmada yangilash kerak bo’ladi. Qachon joylash, qachon ajratish — massiv maydonlar darsida batafsil ko’riladi.

Qachon MongoDB, qachon SQL

Tanlov modaga emas, ma’lumot shakliga bog’liq:

Holat Mos keladi
Yozuvlar tuzilishi har xil MongoDB
Ma’lumot tabiatan ierarxik (ichma-ich) MongoDB
Tuzilish tez-tez o’zgaradi MongoDB
Ko’p jadval murakkab bog’lanishda SQL
Pul o’tkazmasi, hisob-kitob SQL
Hisobot va murakkab agregatsiya SQL

Bu bo’limda nima qilasiz

Yo’l shunday quriladi:

  1. Muhit — MongoDB o’rnatish va mongosh bilan ulanish;
  2. CRUD — hujjat qo’shish, o’qish, yangilash va o’chirish;
  3. Filtr — operatorlar bilan kerakli hujjatni topish;
  4. Node.js — bazani haqiqiy ilovaga ulash.

Bu bo’limda sahifada kod ishga tushiradigan tugma bo’lmaydi: MongoDB brauzerda emas, serverda ishlaydi. Uning o’rniga har buyruqning kutilgan natijasi ko’rsatiladi — siz o’zingiznikini solishtirasiz.

Amaliy mashq

Kod yozilmaydi — hozircha fikrlash mashqi:

  1. Ishlatadigan biror ilovangizni tanlang va undagi ma’lumotni bir varaqqa yozing: nimalar saqlanadi (foydalanuvchi, xabar, buyurtma).
  2. Har biri uchun aniqlang: yozuvlar bir xil tuzilishdami yoki turlichami?
  3. Yuqoridagi taqqoslash jadvaliga qarab har bir ma’lumot uchun SQL yoki MongoDB tanlang va sababini bitta jumlada yozing.
  4. O’z telefon kontaktlaringizni MongoDB hujjati shaklida yozib ko’ring — kimningdir ikkita raqami, kimningdir tug’ilgan sanasi bor.
  5. O’sha kontaktlarni SQL jadvali sifatida yozsangiz nechta ustun kerakligini sanang va nechta katak bo’sh qolishini ko’ring.
  6. SQL nima darsidagi birinchi SELECT so’rovini eslang va uni “kolleksiyadan hujjat topish” so’zlari bilan qayta ifodalang.

5-qadam eng ko’rgazmali: bo’sh kataklar soni MongoDB nega paydo bo’lganini bir qarashda tushuntiradi.

Qisqacha xulosa

  • MongoDB — ma’lumotni jadval qatorlari emas, hujjat sifatida saqlaydigan baza.
  • Hujjat JSON ga o’xshaydi: maydon nomi va qiymat.
  • Jadval o’rnida kolleksiya, qator o’rnida hujjat, ustun o’rnida maydon turadi.
  • Kolleksiya hujjatlardan bir xil tuzilish talab qilmaydi — erkinlik shu yerda.
  • Erkinlikning narxi: xato yozilgan maydon nomi xato bermaydi, jimgina saqlanadi.
  • Bog’liq ma’lumot ko’pincha JOIN o’rniga hujjat ichiga joylashtiriladi.
  • Tanlov ma’lumot shakliga qarab qilinadi, SQL va MongoDB bir-birini inkor etmaydi.

Keyingi darsda MongoDB o’rnatish — bazani kompyuteringizga qo’yish va mongosh bilan birinchi ulanish.

Bu dars foydali bo'ldimi?

marta ko'rildi