Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Thực hiện Validation đơn giản trong MongoDB (Schema Validation)

MongoDB hỗ trợ **Schema Validation** (từ phiên bản 3.2, mạnh từ 3.6 với JSON Schema) để bắt buộc cấu trúc dữ liệu tại cấp database. Sử dụng db.createCollection() với tùy chọn validator định nghĩa JSON Schema: kiểu dữ liệu (bsonType), trường bắt buộc (required), mô tả.

1. Tạo collection có validation: Bắt buộc FirstName, LastName kiểu string

> db.createCollection("demo437", {
    validator: {
        $jsonSchema: {
            bsonType: "object",
            required: ["FirstName", "LastName"],
            properties: {
                FirstName: {
                    bsonType: "string",
                    description: "This is required"
                },
                LastName: {
                    bsonType: "string",
                    description: "This is required"
                }
            }
        }
    }
});
{ "ok": 1 }

2. Test Validation: Insert dữ liệu SAI kiểu (LastName là number)

> db.demo437.insertOne({ "FirstName": "John", "LastName": 1234 });
// LỖI: WriteError: Document failed validation
// "errmsg": "Document failed validation"

3. Test Validation: Insert dữ liệu ĐÚNG

> db.demo437.insertOne({ "FirstName": "John", "LastName": "Smith" });
{ "acknowledged": true, "insertedId": ObjectId("5e7757f7bbc41e36cc3cae9b") }
> db.demo437.insertOne({ "FirstName": "David", "LastName": "Miller" });
{ "acknowledged": true, "insertedId": ObjectId("5e775816bbc41e36cc3cae9d") }

4. Test Validation: Insert SAI kiểu FirstName (number)

> db.demo437.insertOne({ "FirstName": 9887, "LastName": "Miller" });
// LỖI: Document failed validation

5. Xem dữ liệu hợp lệ

> db.demo437.find();

Kết quả:

{ "_id": ObjectId("..."), "FirstName": "John", "LastName": "Smith" }
{ "_id": ObjectId("..."), "FirstName": "David", "LastName": "Miller" }

Các tùy chọn Validation quan trọng:

  • validationLevel: strict (mặc định, validate insert + update), moderate (chỉ validate insert/update doc đã valid), off (tắt).
  • validationAction: error (mặc định, reject), warn (chỉ log warning, cho ghi).
  • Cập nhật validator: db.runCommand({ collMod: "demo437", validator: { ... } }).

JSON Schema hỗ trợ: enum, minimum/maximum, pattern (regex), minItems/maxItems, uniqueItems, nested object/array schema.