Docs Menu
Docs Home
/ /

Consejos para la validación del esquema JSON

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

Cuando especifica additionalProperties: false en su esquema JSON, MongoDB rechaza los documentos que contienen campos no incluidos en el objeto properties de su 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 no son válidos ningún documento:

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

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

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

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

Su aplicación puede estar configurada para establecer los valores de campo 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 para 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 es null:

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

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

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

Campos nulos comparados con campos faltantes

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 Si el cifrado a nivel de campo del lado del cliente o el cifrado consultable están habilitados 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