Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El $jsonSchema operador se usa para validar documentos con una especificación de esquema JSON. Garantiza que los documentos se ajusten a una estructura predefinida, tipos de datos y reglas de validación.
Syntax
La sintaxis del $objectToArray operador es la siguiente:
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"
})
Parámetros
| Parámetro | Description |
|---|---|
bsonType |
Especifica los tipos JSON binarios (BSON) que el campo debe coincidir. Acepta alias de cadena utilizados por el operador $type. |
properties |
Objeto que define reglas de validación para campos específicos. |
minimum/maximum |
Restricciones numéricas para campos numéricos. |
minLength/maxLength |
Restricciones de longitud de cadena. |
minItems/maxItems |
Restricciones de longitud de matriz. |
pattern |
Patrón de expresión regular para la validación de cadenas. |
items |
Validación del esquema para los elementos de matriz. |
uniqueItems |
Boolean que indica si los elementos de matriz deben ser únicos. |
Palabras clave admitidas
DocumentDB admite las siguientes palabras clave de esquema JSON:
| Keyword | Tipo | Description | Usage |
|---|---|---|---|
additionalItems |
arrays | Esquema para elementos de matriz adicionales | Validación de matriz extendida |
bsonType |
Todos los tipos | Extensión de MongoDB: acepta alias de tipo BSON |
"string", "int", "double", "object", "array", , "bool""date" |
exclusiveMinimum |
Números | Límite mínimo exclusivo | Validación numérica avanzada |
exclusiveMaximum |
Números | Límite máximo exclusivo | Validación numérica avanzada |
items |
arrays | Esquema para elementos de matriz | Validación de elementos de matriz |
minimum |
Números | Restricción de valor mínimo | Validación numérica |
maximum |
Números | Restricción de valor máximo | Validación numérica |
minItems |
arrays | Longitud mínima de la matriz | Validación del tamaño de matriz |
maxItems |
arrays | Longitud máxima de la matriz | Validación del tamaño de matriz |
multipleOf |
Números | El valor debe ser múltiplo del número especificado. | Restricciones matemáticas |
minLength |
cuerdas | Longitud mínima de cadena | Validación de cadenas |
maxLength |
cuerdas | Longitud máxima de cadena | Validación de cadenas |
pattern |
cuerdas | Coincidencia de patrones de expresión regular | Validación de formato de cadena |
properties |
Objetos | Definición de reglas de validación para campos de objeto | Definición de esquema para objetos anidados |
required |
Objetos | Matriz de nombres de campo necesarios | Exigir campos obligatorios |
type |
Todos los tipos | Tipos de esquema JSON estándar |
"object", "array", "number", "boolean", , "string", "null" |
uniqueItems |
arrays | Exigir elementos de matriz únicos | Integridad de datos |
Palabras clave no admitidas
Estas palabras clave de esquema JSON todavía se admiten en DocumentDB:
| Keyword | Tipo | Motivo de no compatibilidad | Solución |
|---|---|---|---|
additionalProperties |
Objetos | No implementado | Uso de definiciones explícitas properties |
allOf |
Todos los tipos | Operador lógico no admitido | Uso de la validación anidada |
anyOf |
Todos los tipos | Operador lógico no admitido | Utilice consultas separadas |
dependencies |
Objetos | No se admite la validación de dependencias complejas | Identificador en la lógica de la aplicación |
description |
N/A | Es posible que no aparezca en los mensajes de error | Solo informativo |
enum |
Todos los tipos | No se admite la validación de enumeración | Use $in el operador en su lugar |
maxProperties |
Objetos | No se admite la validación del recuento de propiedades | Identificador en la lógica de la aplicación |
minProperties |
Objetos | No se admite la validación del recuento de propiedades | Identificador en la lógica de la aplicación |
not |
Todos los tipos | Operador de negación no admitido | Uso de reglas de validación positivas |
oneOf |
Todos los tipos | Operador lógico no admitido | Uso de la validación de nivel de aplicación |
patternProperties |
Objetos | No se admite la validación de propiedades basada en patrones | Usar nombres de propiedad explícitos |
title |
N/A | Campo de metadatos no procesado | Use description en su lugar |
Examples
Vamos a explorar ejemplos prácticos mediante el stores conjunto de datos:
{
"_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
}
]
}
}
Ejemplo 1: Validación básica de la estructura
Esta consulta recupera todos los almacenes con nombres entre 5 y 100 caracteres, y que las coordenadas geográficas se encuentran dentro de intervalos válidos: latitud entre -90 y 90, y longitud entre -180 y 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)
Ejemplo 2: Validación de ventas con elementos de matriz
Esta consulta recupera todos los documentos de almacén en los que el campo sales es un objeto válido que contiene un valor totalSales no negativo y una matriz salesByCategory con al menos un elemento.
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)
Esta consulta debe devolver esta salida:
[
{
_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
}
]
Ejemplo 3: Combinación con operadores de consulta
Esta consulta recupera todos los documentos de almacén en los que el campo personal es un objeto válido que incluye un subobjeto totalStaff con al menos un miembro del personal de tiempo completo (fullTime ≥ 1) y sales.totalSales mayores que 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)
Esta consulta devuelve el siguiente resultado:
[
{
_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
}
]