Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Consejos para la validación de esquema JSON

Esta página describe las mejores prácticas para la validación del esquema JSON para ayudar a evitar problemas comunes.

Cuando se especifica additionalProperties: false en el JSON schema, MongoDB rechaza documentos que contienen campos no incluidos en el objeto properties del esquema.

Dado que todos los objetos contienen un campo _id generado automáticamente, al configurar additionalProperties: false, debe incluir el campo _id en su objeto properties. De lo contrario, se rechazarán todos los documentos.

Por ejemplo, con esta validación, ningún documento es válido:

{
"$jsonSchema": {
"required": [ "_id", "storeLocation" ],
"properties": {
"storeLocation": { "bsonType": "string" }
},
"additionalProperties": false
}
}

Esta validación garantiza que storeLocation sea una string. Sin embargo, el objeto properties no contiene un campo _id.

Para permitir documentos en la colección, debes actualizar el objeto properties para incluir un campo _id:

{
"$jsonSchema": {
"required": [ "_id", "storeLocation" ],
"properties": {
"_id": { "bsonType": "objectId" },
"storeLocation": { "bsonType": "string" }
},
"additionalProperties": false
}
}

Tu aplicación puede estar configurada para establecer los valores de los campos faltantes en null, en lugar de no incluir esos campos en el objeto enviado a la colección.

Si su esquema valida los tipos de datos para un campo, para insertar documentos con un valor null en ese campo, debe permitir explícitamente null como un tipo BSON válido.

Por ejemplo, esta validación de esquema no permite documentos donde storeLocation sea null:

db.createCollection("sales",
{
validator:
{
"$jsonSchema": {
"properties": {
"storeLocation": { "bsonType": "string" }
}
}
}
}
)

Con la validación anterior, este documento es rechazado:

db.store.insertOne( { storeLocation: null } )

Alternativamente, esta validación de esquema permite valores null para storeLocation:

db.createCollection("store",
{
validator:
{
"$jsonSchema": {
"properties": {
"storeLocation": { "bsonType": [ "null", "string" ] }
}
}
}
}
)

Con la validación anterior, se permite este documento:

db.store.insertOne( { storeLocation: null } )

Nota

Comparación de campos nulos con campos ausentes

null los valores de los campos no son lo mismo que los campos faltantes. Si falta un campo en un documento, MongoDB no valida ese campo.

Si tienes Encriptación a nivel de campo del lado del cliente o Queryable Encryption habilitadas en una colección, la validación está sujeta a las siguientes restricciones:

  • Para CSFLE, al ejecutar collMod, la librería libmongocrypt prefiere el esquema de cifrado JSON especificado en el comando. Esto permite establecer un esquema en una colección que aún no lo tiene.

  • Para Queryable Encryption, cualquier JSON schema que incluya un campo cifrado resulta en un error de análisis de query.

Volver

Especifique los valores del campo

En esta página