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)-ийн хос.
{
"_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-ийн өвөрмөц танигч.
// Бид ингэж оруулна:
{ "name": "Болд", "age": 22 }
// MongoDB ингэж хадгална:
{
"_id": ObjectId("64abc1234567890abcdef012"),
"name": "Болд",
"age": 22
}
ObjectId нь 12 байтын өвөрмөц утга бөгөөд:
- 4 байт — Unix timestamp (үүссэн цаг)
- 5 байт — random утга
- 3 байт — тоолуур
Өөрөө _id тодорхойлж болно:
{ "_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 хадгалж болно.
{
"_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-уудын arrayskills— string-уудын array
SQL-д энэ мэдээллийг хадгалахын тулд 3 тусдаа хүснэгт ба JOIN ашиглах байсан.
Collection үүсгэх
MongoDB-д collection-г тусдаа үүсгэх шаардлагагүй — эхний document оруулахад автоматаар үүснэ.
// "students" collection байхгүй ч гэсэн —
// document оруулахад автоматаар үүснэ
db.students.insertOne({ name: "Болд" });
Хэрэв хоосон collection үүсгэх бол:
db.createCollection("logs");
Нэршлийн дүрэм
Database нэр:
- Жижиг үсэг ашиглана
- Зай, тусгай тэмдэгт хориглоно
- Урт нь 64 байтаас бага байна
✅ school
✅ myapp_db
✅ ecommerce2025
❌ My Database
❌ school!db
Collection нэр:
- Зай агуулахгүй байна
$тэмдэгтээр эхлэхгүй байна- Монгол нэр ашиглаж болно
✅ students
✅ lesson_progress
✅ хэрэглэгчид
❌ my collection
❌ $users
Дараагийн хичээлд:
MongoDB Shell (mongosh) суулгаж Atlas-д холбогдон шууд команд ажиллуулна.