Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Оператор $jsonSchema используется для проверки документов в спецификации схемы JSON. Это гарантирует, что документы соответствуют предопределенной структуре, типам данных и правилам проверки.
Syntax
Синтаксис оператора $isArray выглядит следующим образом:
db.createCollection("collectionName", {
validator: {
$jsonSchema: {
bsonType: "object",
required: ["field1", "field2"],
properties: {
field1: {
bsonType: "string",
},
field2: {
bsonType: "int",
minimum: 0,
description: "Description of field2 requirements"
}
}
}
},
validationLevel: "strict", // Optional: "strict" or "moderate"
validationAction: "error" // Optional: "error" or "warn"
})
Parameters
| Parameter | Description |
|---|---|
bsonType |
Указывает типы двоичного JSON (BSON), которые должны соответствовать полю. Принимает псевдонимы строк, используемые оператором $type. |
properties |
Объект, определяющий правила проверки для определенных полей. |
minimum/maximum |
Числовые ограничения для полей чисел. |
minLength/maxLength |
Ограничения длины строки. |
minItems/maxItems |
Ограничения длины массива. |
pattern |
Шаблон регулярного выражения для проверки строки. |
items |
Проверка схемы для элементов массива. |
uniqueItems |
Логическое значение, указывающее, должны ли элементы массива быть уникальными. |
Поддерживаемые ключевые слова
Azure DocumentDB поддерживает следующие ключевые слова схемы JSON:
| Keyword | Тип | Description | Usage |
|---|---|---|---|
additionalItems |
массивы | Схема для дополнительных элементов массива | Расширенная проверка массива |
bsonType |
все типы | Расширение MongoDB — принимает псевдонимы типов BSON |
"string", "int", "double""object""array""bool""date" |
exclusiveMinimum |
числа | Эксклюзивная минимальная граница | Расширенная числовая проверка |
exclusiveMaximum |
числа | Эксклюзивная максимальная граница | Расширенная числовая проверка |
items |
массивы | Схема элементов массива | Проверка элемента Массива |
minimum |
числа | Минимальное ограничение значений | Числовая проверка |
maximum |
числа | Максимальное ограничение значений | Числовая проверка |
minItems |
массивы | Минимальная длина массива | Проверка размера массива |
maxItems |
массивы | Максимальная длина массива | Проверка размера массива |
multipleOf |
числа | Значение должно быть нескольким из указанного числа. | Математические ограничения |
minLength |
Строки | Минимальная длина строки | Проверка строки |
maxLength |
Строки | Максимальная длина строки | Проверка строки |
pattern |
Строки | Сопоставление шаблонов регулярных выражений | Проверка формата строки |
properties |
Объектов | Определение правил проверки для полей объектов | Определение схемы для вложенных объектов |
required |
Объектов | Массив обязательных имен полей | Принудительное применение обязательных полей |
type |
все типы | Стандартные типы схем JSON |
"object", , "array""number""boolean""string","null" |
uniqueItems |
массивы | Принудительное применение уникальных элементов массива | Целостность данных |
Неподдерживаемые ключевые слова
Эти ключевые слова схемы JSON еще не поддерживаются в Azure DocumentDB:
| Keyword | Тип | Причина не поддерживается | Обходной путь |
|---|---|---|---|
additionalProperties |
Объектов | Не реализовано | Использование явных properties определений |
allOf |
все типы | Логический оператор не поддерживается | Использование вложенной проверки |
anyOf |
все типы | Логический оператор не поддерживается | Использование отдельных запросов |
dependencies |
Объектов | Сложная проверка зависимостей не поддерживается | Обработка в логике приложения |
description |
N/A | Может не отображаться в сообщениях об ошибках | Только информационные |
enum |
все типы | Проверка перечисления не поддерживается | Вместо этого используйте $in оператор |
maxProperties |
Объектов | Проверка счетчика свойств не поддерживается | Обработка в логике приложения |
minProperties |
Объектов | Проверка счетчика свойств не поддерживается | Обработка в логике приложения |
not |
все типы | Оператор отрицания не поддерживается | Использование правил положительной проверки |
oneOf |
все типы | Логический оператор не поддерживается | Использование проверки на уровне приложения |
patternProperties |
Объектов | Проверка свойств на основе шаблонов не поддерживается | Использование явных имен свойств |
title |
N/A | Поле метаданных не обработано | Вместо нее следует использовать description. |
Examples
Рассмотрим практические примеры с помощью stores набора данных:
{
"_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
}
]
}
}
Пример 1. Базовая проверка структуры
Этот запрос извлекает все хранилища с именами от 5 до 100 символов, и географические координаты попадают в допустимые диапазоны: широта между -90 и 90 и долготой между -180 и 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)
Пример 2. Проверка продаж с элементами массива
Этот запрос извлекает все документы магазина, в которых поле продаж является допустимым объектом, содержащим не отрицательное значение totalSales и массив salesByCategory по крайней мере с одним элементом.
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)
Этот запрос должен возвращать следующие выходные данные:
[
{
_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
}
]
Пример 3. Объединение с операторами запросов
Этот запрос извлекает все документы магазина, где поле персонала является допустимым объектом, включающим подобъект TotalStaff с по крайней мере одним сотрудником полного времени (fullTime ≥ 1) и sales.totalSales больше 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)
Этот запрос возвращает следующий результат:
[
{
_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
}
]
Связанный контент
- Просмотрите параметры миграции из MongoDB в Azure DocumentDB.
- Дополнительные сведения о совместимости функций с MongoDB.