Bagikan melalui


$jsonSchema

Operator $jsonSchema digunakan untuk memvalidasi dokumen terhadap spesifikasi Skema JSON. Ini memastikan bahwa dokumen sesuai dengan struktur, jenis data, dan aturan validasi yang telah ditentukan sebelumnya.

Syntax

Sintaks untuk $objectToArray operator adalah sebagai berikut:

db.createCollection("collectionName", {
  validator: {
    $jsonSchema: {
      bsonType: "object",
      required: ["field1", "field2"],
      properties: {
        field1: {
          bsonType: "string",
          description: "Description of field1 requirements"
        },
        field2: {
          bsonType: "int",
          minimum: 0,
          description: "Description of field2 requirements"
        }
      }
    }
  },
  validationLevel: "strict", // Optional: "strict" or "moderate"
  validationAction: "error"   // Optional: "error" or "warn"
})

Parameter-parameternya

Pengaturan Description
bsonType Menentukan jenis Binary JSON (BSON) yang harus dicocokkan dengan bidang. Menerima alias string yang digunakan oleh operator $type.
properties Objek yang menentukan aturan validasi untuk bidang tertentu.
minimum/maximum Batasan numerik untuk bidang angka.
minLength/maxLength Batasan panjang string.
minItems/maxItems Batasan panjang array.
pattern Pola ekspresi reguler untuk validasi string.
items Validasi skema untuk elemen array.
uniqueItems Boolean menunjukkan apakah item array harus unik.

Kata Kunci yang Didukung

DocumentDB mendukung kata kunci Skema JSON berikut:

Keyword Tipe Description Usage
additionalItems arrays Skema untuk item array tambahan Validasi array yang diperluas
bsonType semua jenis Ekstensi MongoDB - menerima alias jenis BSON "string", "int""double", "object", "array", "bool", "date"
exclusiveMinimum Angka Batas minimum eksklusif Validasi numerik tingkat lanjut
exclusiveMaximum Angka Batas maksimum eksklusif Validasi numerik tingkat lanjut
items arrays Skema untuk elemen array Validasi elemen array
minimum Angka Batasan nilai minimum Validasi numerik
maximum Angka Batasan nilai maksimum Validasi numerik
minItems arrays Panjang array minimum Validasi ukuran array
maxItems arrays Panjang array maksimum Validasi ukuran array
multipleOf Angka Nilai harus kelipatan dari angka yang ditentukan Batasan matematika
minLength String Panjang string minimum Validasi string
maxLength String Panjang string maksimum Validasi string
pattern String Pencocokan pola ekspresi reguler Validasi format string
properties Objek Menentukan aturan validasi untuk bidang objek Definisi skema untuk objek berlapis
required Objek Array nama bidang yang diperlukan Menerapkan bidang wajib
type semua jenis Jenis Skema JSON Standar "object", "array""number", "boolean", "string", "null"
uniqueItems arrays Menerapkan elemen array unik Integritas data

Kata Kunci yang Tidak Didukung

Kata kunci Skema JSON ini belum didukung di DocumentDB:

Keyword Tipe Alasan Untuk Non-Dukungan Penanganan masalah
additionalProperties Objek Tidak diimplementasikan Menggunakan definisi eksplisit properties
allOf semua jenis Operator logika tidak didukung Gunakan validasi berlapis
anyOf semua jenis Operator logika tidak didukung Gunakan kueri terpisah
dependencies Objek Validasi dependensi kompleks tidak didukung Menangani logika aplikasi
description N/A Mungkin tidak muncul dalam pesan kesalahan Hanya informasi
enum semua jenis Validasi enumerasi tidak didukung Gunakan $in operator sebagai gantinya
maxProperties Objek Validasi jumlah properti tidak didukung Menangani logika aplikasi
minProperties Objek Validasi jumlah properti tidak didukung Menangani logika aplikasi
not semua jenis Operator negasi tidak didukung Menggunakan aturan validasi positif
oneOf semua jenis Operator logika tidak didukung Menggunakan validasi tingkat aplikasi
patternProperties Objek Validasi properti berbasis pola tidak didukung Gunakan nama properti eksplisit
title N/A Bidang metadata tidak diproses Menggunakan description sebagai gantinya

Examples

Mari kita jelajahi contoh praktis menggunakan himpunan stores data:

{
  "_id": "2cf3f885-9962-4b67-a172-aa9039e9ae2f",
  "name": "First Up Consultants | Bed and Bath Center - South Amir",
  "location": {
    "lat": 60.7954,
    "lon": -142.0012
  },
  "staff": {
    "totalStaff": {
      "fullTime": 18,
      "partTime": 17
    }
  },
  "sales": {
    "totalSales": 37701,
    "salesByCategory": [
      {
        "categoryName": "Mattress Toppers",
        "totalSales": 37701
      }
    ]
  }
}

Contoh 1: Validasi Struktur Dasar

Kueri ini mengambil semua penyimpanan dengan nama antara 5 dan 100 karakter, dan koordinat geografis berada dalam rentang yang valid: garis lintang antara -90 dan 90, dan garis bujur antara -180 dan 180.

db.stores.find({
  $jsonSchema: {
    bsonType: "object",
    properties: {
      _id: {
        bsonType: "string"
      },
      name: {
        bsonType: "string",
        minLength: 5,
        maxLength: 100
      },
      location: {
        bsonType: "object",
        properties: {
          lat: {
            bsonType: "double",
            minimum: -90,
            maximum: 90
          },
          lon: {
            bsonType: "double",
            minimum: -180,
            maximum: 180
          }
        }
      }
    }
  }
}).limit(1)

Contoh 2: Validasi Penjualan dengan Item Array

Kueri ini mengambil semua dokumen penyimpanan di mana bidang penjualan adalah objek valid yang berisi nilai totalSales non-negatif dan array salesByCategory dengan setidaknya satu item.

db.stores.find({
  $jsonSchema: {
    bsonType: "object",
    properties: {
      sales: {
        bsonType: "object",
        properties: {
          totalSales: {
            bsonType: "int",
            minimum: 0
          },
          salesByCategory: {
            bsonType: "array",
            minItems: 1,
            items: {
              bsonType: "object",
              properties: {
                categoryName: {
                  bsonType: "string",
                  minLength: 1
                },
                totalSales: {
                  bsonType: "int",
                  minimum: 0
                }
              }
            }
          }
        }
      }
    }
  }
}).limit(1)

Kueri ini harus mengembalikan output ini:

[
  {
    _id: 'new-store-001',
    name: 'Adatum Corporation - Downtown Branch',
    sales: { totalSales: 5000 },
    createdDate: ISODate('2025-06-11T11:11:32.262Z'),
    status: 'new',
    staff: { totalStaff: { fullTime: 0, partTime: 0 } },
    version: 1,
    storeOpeningDate: ISODate('2025-06-11T11:11:32.262Z'),
    storeFeatures: 213
  }
]

Contoh 3: Menggabungkan dengan Operator Kueri

Kueri ini mengambil semua dokumen penyimpanan di mana bidang staf adalah objek valid yang menyertakan subobjek totalStaff dengan setidaknya satu anggota staf penuh waktu (fullTime ≥ 1) dan sales.totalSales lebih besar dari 10.000.

db.stores.find({
  $and: [
    {
      $jsonSchema: {
        properties: {
          staff: {
            bsonType: "object",
            properties: {
              totalStaff: {
                bsonType: "object",
                properties: {
                  fullTime: {
                    bsonType: "int",
                    minimum: 1
                  }
                }
              }
            }
          }
        }
      }
    },
    // Additional query constraints
    {
      "sales.totalSales": { $gt: 10000 }
    }
  ]
}).limit(1)

Kueri ini mengembalikan hasil berikut:

[
  {
    _id: 'future-electronics-001',
    address: { city: 'New Tech City' },
    name: 'Boulder Innovations - Future Electronics Hub',
    sales: { totalSales: 25000 },
    establishedDate: ISODate('2025-06-11T11:14:23.147Z'),
    categories: [ 'electronics', 'gadgets', 'smart-home' ],
    promotionEvents: [],
    ratings: { average: 0, count: 0, reviews: [] },
    inventory: {
      lastUpdated: ISODate('2025-06-11T11:14:23.147Z'),
      totalItems: 0,
      lowStockAlerts: []
    },
    storeOpeningDate: ISODate('2025-06-11T11:11:32.262Z'),
    storeFeatures: 120
  }
]