MongoDB / Mongoose үндэс

Mongoose үндэс

Mongoose нь Node.js-д MongoDB-г ашиглах ODM (Object Document Mapper) сан юм. Шууд MongoDB driver ашиглахтай харьцуулахад Mongoose нь schema, validation, middleware зэрэг нэмэлт давхаргыг өгч, кодыг илүү бүтэцтэй, аюулгүй болгодог.

Суулгах

bash
npm install mongoose

TypeScript ашиглаж байгаа бол type тодорхойлолт дотор нь байгаа тул тусдаа суулгах шаардлагагүй.

mongoose.connect() — холбогдох

javascript
const mongoose = require("mongoose");

async function connectDB() {
  try {
    await mongoose.connect(process.env.MONGODB_URI);
    console.log("MongoDB-д холбогдлоо");
  } catch (error) {
    console.error("Холболт амжилтгүй:", error);
    process.exit(1);
  }
}

connectDB();

Mongoose нь холболтын нөөц (connection pool) автоматаар удирддаг — аппликейшн дахин дахин холбогдох шаардлагагүй.

Schema — өгөгдлийн бүтэц тодорхойлох

Mongoose Schema нь collection-д хадгалагдах document-ийн бүтэц ба дүрмийг тодорхойлдог:

javascript
const { Schema } = require("mongoose");

const userSchema = new Schema({
  username: {
    type: String,
    required: true,
    unique: true,
    trim: true,
    minlength: 3,
  },
  email: {
    type: String,
    required: true,
    unique: true,
    lowercase: true,
  },
  age: {
    type: Number,
    min: 0,
    max: 120,
  },
  role: {
    type: String,
    enum: ["user", "admin"],
    default: "user",
  },
  createdAt: {
    type: Date,
    default: Date.now,
  },
});

Нийтлэг Schema option-ууд:

| Option | Тайлбар | | ------------------------- | ------------------------------- | | required | Заавал байх ёстой | | unique | Давхардахгүй | | default | Анхдагч утга | | min / max | Тоон хязгаар | | minlength / maxlength | Текстийн урт | | enum | Зөвшөөрөгдсөн утгуудын жагсаалт | | trim | Эхэн/төгсгөлийн зайг хасах | | lowercase | Жижиг үсэг болгох |

Model — Schema-г ашиглах объект

Model нь Schema дээр тулгуурлан collection-тэй ажиллах арга зам юм:

javascript
const mongoose = require("mongoose");

const User = mongoose.model("User", userSchema);
// "User" → MongoDB-д "users" collection үүснэ (автоматаар жижиг, олон тооны нэр болно)

TypeScript-тэй ашиглах

TypeScript-д interface + Schema хамт тодорхойлно:

typescript
import mongoose, { Schema, Document } from "mongoose";

// Interface — TypeScript-ийн төрлийн мэдэгдэл
interface IUser extends Document {
  username: string;
  email: string;
  age?: number;
  role: "user" | "admin";
  createdAt: Date;
}

// Schema
const userSchema = new Schema<IUser>({
  username: { type: String, required: true, unique: true },
  email: { type: String, required: true, unique: true },
  age: { type: Number, min: 0 },
  role: { type: String, enum: ["user", "admin"], default: "user" },
  createdAt: { type: Date, default: Date.now },
});

// Model
const User = mongoose.model<IUser>("User", userSchema);

export default User;

Жишээ: Document үүсгэж, хадгалах

typescript
// Шинэ хэрэглэгч үүсгэх
const newUser = new User({
  username: "bold_bataa",
  email: "bold@example.com",
  age: 25,
});

// Database-д хадгалах
await newUser.save();

// Эсвэл нэг мөрөөр
const user = await User.create({
  username: "dorj_od",
  email: "dorj@example.com",
  age: 22,
});

console.log(user._id); // MongoDB-ийн автомат ObjectId

Mongoose vs шууд MongoDB driver

| | MongoDB driver | Mongoose | | ---------- | -------------- | ------------------ | | Schema | Байхгүй | Бүтэц тодорхойлно | | Validation | $jsonSchema | Schema дотор | | Хэрэглэхэд | Уян хатан | Бүтэцтэй, аюулгүй | | TypeScript | Гараар type | Interface + Schema | | Middleware | Байхгүй | pre/post hook |

Жижиг аппликейшн буюу энгийн скрипт — MongoDB driver. Том Node.js/TypeScript аппликейшн — Mongoose.

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

Mongoose-ийн Schema-г илүү нарийн тодорхойлж, model-оо хэрхэн зохион байгуулах талаар үзнэ.