MongoDB / Document validation

Document validation

MongoDB schema-гүй ч validation дүрэм тавьж collection-д оруулах өгөгдлийн форматыг баталгаажуулж болно. $jsonSchema ашиглан талбарын төрөл, шаардлагатай талбарууд, утгын хязгаарыг тодорхойлно.

Validation үүсгэх

Collection үүсгэхдээ validator тавина:

javascript
db.createCollection("users", {
  validator: {
    $jsonSchema: {
      bsonType: "object",
      required: ["username", "email", "age"],
      properties: {
        username: {
          bsonType: "string",
          description: "Хэрэглэгчийн нэр — заавал string байх ёстой",
        },
        email: {
          bsonType: "string",
          pattern: "^.+@.+\\..+$",
          description: "Зөв и-мэйл формат шаардлагатай",
        },
        age: {
          bsonType: "int",
          minimum: 0,
          maximum: 120,
          description: "Нас 0–120 хооронд байх ёстой",
        },
      },
    },
  },
});

required — заавал байх талбарууд

javascript
required: ["username", "email", "age"];

Жагсаалтад байгаа талбаруудын аль нэг дутуу бол insert алдаа өгнө.

bsonType — өгөгдлийн төрөл

Нийтлэг bsonType утгууд:

| bsonType | Тайлбар | | ------------ | ------------------ | | "string" | Текст | | "int" | Бүхэл тоо (32-bit) | | "double" | Аравтын бутархай | | "bool" | true / false | | "date" | Огноо | | "objectId" | ObjectId | | "array" | Массив | | "object" | Nested object |

javascript
properties: {
  price:     { bsonType: "double" },
  stock:     { bsonType: "int" },
  isFeatured:{ bsonType: "bool" },
  createdAt: { bsonType: "date" },
  authorId:  { bsonType: "objectId" }
}

minimum, maximum — тоон хязгаар

javascript
properties: {
  rating: {
    bsonType: "int",
    minimum: 1,
    maximum: 5,
    description: "Үнэлгээ 1–5 байх ёстой"
  },
  price: {
    bsonType: "double",
    minimum: 0,
    description: "Үнэ 0-с бага байж болохгүй"
  }
}

enum — зөвшөөрөгдсөн утгуудын жагсаалт

javascript
properties: {
  status: {
    bsonType: "string",
    enum: ["active", "inactive", "pending"],
    description: "Зөвхөн тодорхой утгуудыг зөвшөөрнө"
  },
  role: {
    bsonType: "string",
    enum: ["user", "admin", "moderator"]
  }
}

Массивын validation

javascript
properties: {
  skills: {
    bsonType: "array",
    minItems: 1,
    maxItems: 20,
    uniqueItems: true,
    items: {
      bsonType: "string"
    }
  }
}

Validation action — алдаа эсвэл анхааруулга

validationAction нь validation дүрэм зөрчигдөхөд хэрхэн хариу үзүүлэхийг тодорхойлно:

javascript
db.createCollection("users", {
  validator: { $jsonSchema: { ... } },
  validationAction: "error"   // "error" (default) эсвэл "warn"
})
  • "error" — validation зөрчигдвөл insert/update цуцлагдана (алдаа өгнө)
  • "warn" — insert/update амжилттай болж гэхдээ MongoDB-ийн log-д анхааруулга бичнэ

Хөгжүүлэлтийн шатанд "warn" ашиглаад, production-д "error" болгох нь нийтлэг дадал.

Байгаа collection-д validation нэмэх

collMod командаар одоо байгаа collection-д validation нэмж болно:

javascript
db.runCommand({
  collMod: "users",
  validator: {
    $jsonSchema: {
      bsonType: "object",
      required: ["username", "email"],
      properties: {
        username: { bsonType: "string" },
        email: { bsonType: "string" },
      },
    },
  },
  validationAction: "error",
});

Validation шалгах

Зөв мэдээлэл:

javascript
// ✅ Амжилттай — бүх дүрэм биелсэн
db.users.insertOne({
  username: "bold",
  email: "bold@example.com",
  age: 25,
});

Буруу мэдээлэл:

javascript
// ❌ Алдаа — age байхгүй (required), email формат буруу
db.users.insertOne({
  username: "dorj",
  email: "not-an-email",
  age: -5, // minimum: 0 зөрчив
});
// MongoServerError: Document failed validation

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

Олон document-д нэгэн зэрэг, алдааш, амжилттай хийгддэг transaction-ийн талаар үзнэ.