MongoDB / Database, Collection, Document

Database, Collection, Document

MongoDB-ийн бүтцийг ойлгохын тулд гурван түвшний шатлалыг мэдэх хэрэгтэй: Database → Collection → Document.

MongoDB-ийн шатлал

код
MongoDB Server
├── Database: school
│   ├── Collection: students
│   │   ├── Document: { "_id": ..., "name": "Болд" }
│   │   ├── Document: { "_id": ..., "name": "Дорж" }
│   │   └── Document: { "_id": ..., "name": "Нараа" }
│   └── Collection: courses
│       ├── Document: { "_id": ..., "title": "MongoDB" }
│       └── Document: { "_id": ..., "title": "JavaScript" }
└── Database: ecommerce
    └── Collection: products
        └── Document: { "_id": ..., "name": "Ном" }

Database

Нэг MongoDB server дотор олон database байж болно. Жишээ нь: school, ecommerce, blog гэх мэт тусдаа систем бүр өөр database ашиглана.

Collection

Database дотор хамааралтай document-уудыг цуглуулж хадгалах сав. SQL-ийн table-тай дүйцэхүйц — гэвч тогтмол бүтэц (schema) байхгүй. Нэг collection дотор өөр өөр талбартай document-ууд байж болно.

Document

MongoDB-д хадгалагдах хамгийн жижиг нэгж. JSON форматтай маш төстэй — талбар (field) ба утга (value)-ийн хос.

javascript
{
  "_id": ObjectId("64abc1234567890abcdef012"),
  "name": "Болд Батаа",
  "age": 22,
  "city": "Улаанбаатар"
}

SQL vs MongoDB харьцуулалт

| SQL | MongoDB | Тайлбар | | ----------- | ---------- | ------------------ | | Database | Database | Адилхан | | Table | Collection | Бүтэц шаардлагагүй | | Row | Document | JSON-тай төстэй | | Column | Field | Талбар | | Primary Key | _id | Автомат үүснэ | | JOIN | $lookup | Aggregation дотор |


_id талбар

MongoDB бүх document-д автоматаар _id талбар нэмдэг — энэ нь тухайн document-ийн өвөрмөц танигч.

javascript
// Бид ингэж оруулна:
{ "name": "Болд", "age": 22 }

// MongoDB ингэж хадгална:
{
  "_id": ObjectId("64abc1234567890abcdef012"),
  "name": "Болд",
  "age": 22
}

ObjectId нь 12 байтын өвөрмөц утга бөгөөд:

  • 4 байт — Unix timestamp (үүссэн цаг)
  • 5 байт — random утга
  • 3 байт — тоолуур

Өөрөө _id тодорхойлж болно:

javascript
{ "_id": "mn-001", "name": "Улаанбаатар" }

Гэвч давхардал гарахгүй байх хариуцлага өөрт байна.


BSON — MongoDB-ийн дотоод формат

MongoDB disk дээр BSON (Binary JSON) форматаар хадгалдаг. Бид JSON-оор бодож ажилладаг — хөрвүүлэлтийг MongoDB өөрөө хийдэг.

BSON нь JSON-оос илүү өргөн төрлийг дэмждэг:

| BSON төрөл | Жишээ | Тайлбар | | ------------- | ----------------------- | ------------- | | String | "Болд" | Текст | | Int32 / Int64 | 25 | Бүхэл тоо | | Double | 3.14 | Бутархай тоо | | Boolean | true / false | Логик | | Date | ISODate("2025-01-01") | Огноо | | ObjectId | ObjectId("64abc...") | Өвөрмөц ID | | Array | ["JS", "Python"] | Жагсаалт | | Object | { "city": "УБ" } | Дотоод объект | | Null | null | Хоосон утга |


Nested document — дотоод объект

MongoDB-ийн хамгийн хүчирхэг тал: document дотор дахин document хадгалж болно.

javascript
{
  "_id": ObjectId("64abc1234567"),
  "name": "Нараа",
  "address": {
    "city": "Улаанбаатар",
    "district": "Сүхбаатар",
    "zipcode": "14200"
  },
  "education": [
    {
      "school": "МУБИС",
      "degree": "Бакалавр",
      "year": 2022
    },
    {
      "school": "МУИС",
      "degree": "Магистр",
      "year": 2024
    }
  ],
  "skills": ["Python", "MongoDB", "Docker"]
}

Нэг document-д:

  • address — дотоод object (nested document)
  • education — object-уудын array
  • skills — string-уудын array

SQL-д энэ мэдээллийг хадгалахын тулд 3 тусдаа хүснэгт ба JOIN ашиглах байсан.


Collection үүсгэх

MongoDB-д collection-г тусдаа үүсгэх шаардлагагүй — эхний document оруулахад автоматаар үүснэ.

javascript
// "students" collection байхгүй ч гэсэн —
// document оруулахад автоматаар үүснэ
db.students.insertOne({ name: "Болд" });

Хэрэв хоосон collection үүсгэх бол:

javascript
db.createCollection("logs");

Нэршлийн дүрэм

Database нэр:

  • Жижиг үсэг ашиглана
  • Зай, тусгай тэмдэгт хориглоно
  • Урт нь 64 байтаас бага байна
код
✅ school
✅ myapp_db
✅ ecommerce2025
❌ My Database
❌ school!db

Collection нэр:

  • Зай агуулахгүй байна
  • $ тэмдэгтээр эхлэхгүй байна
  • Монгол нэр ашиглаж болно
код
✅ students
✅ lesson_progress
✅ хэрэглэгчид
❌ my collection
❌ $users

Дараагийн хичээлд:

MongoDB Shell (mongosh) суулгаж Atlas-д холбогдон шууд команд ажиллуулна.