Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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
}
]