Dicas para a validação de JSON schema
Nesta página
Esta página descreve as melhores práticas para validação de JSON schema para ajudar a evitar problemas comuns.
_id
Campo e additionalProperties: false
Quando você especifica additionalProperties: false
em seu JSON schema, o MongoDB rejeita documentos que contêm campos não incluídos no objeto properties
do seu esquema.
Como todos os objetos contêm um campo _id
gerado automaticamente, ao definir additionalProperties: false
, você deve incluir o campo _id
no objeto properties
. Caso contrário, todos os documentos serão rejeitados.
Por exemplo, com esta validação, nenhum documento é válido:
{ "$jsonSchema": { "required": [ "_id", "storeLocation" ], "properties": { "storeLocation": { "bsonType": "string" } }, "additionalProperties": false } }
Essa validação garante que storeLocation
seja uma string. No entanto, o objeto properties
não contém um campo _id
.
Para permitir documentos na coleta, você deve atualizar o objeto properties
para incluir um campo _id
:
{ "$jsonSchema": { "required": [ "_id", "storeLocation" ], "properties": { "_id": { "bsonType": "objectId" }, "storeLocation": { "bsonType": "string" } }, "additionalProperties": false } }
Validação para null
valores de campo
Seu aplicativo pode ser configurado para definir valores de campo ausentes para null
, em vez de não incluir esses campos no objeto enviado para a coleta.
Se seu esquema validar os tipos de dados de um campo, para inserir documentos com um null
valor para esse campo, você deverá permitir explicitamente null
tipos de BSON como um tipo BSON válido.
Por exemplo, esta validação de esquema não permite documentos em que storeLocation
é null
:
db.createCollection("sales", { validator: { "$jsonSchema": { "properties": { "storeLocation": { "bsonType": "string" } } } } } )
Com a validação anterior, este documento é rejeitado:
db.store.insertOne( { storeLocation: null } )
Alternativamente, esta validação de esquema permite valores null
para storeLocation
:
db.createCollection("store", { validator: { "$jsonSchema": { "properties": { "storeLocation": { "bsonType": [ "null", "string" ] } } } } } )
Com a validação anterior, este documento é permitido:
db.store.insertOne( { storeLocation: null } )
Observação
Campos null em comparação com campos ausentes
null
Os campos com valor null não são iguais a campos ausentes. Se um campo estiver faltando em um documento, o MongoDB não validará esse campo.
Validação com campos criptografados
Se você tiver a criptografia do lado do campo do lado do cliente ou a Queryable Encryption ativada em uma coleção, a validação estará sujeita às seguintes restrições:
Para CSFLE, ao executar
collMod
, a biblioteca libmongocrypt prefere o esquema de criptografia JSON especificado no comando. Isso permite definir um esquema em uma coleção que ainda não tem um.Na Queryable Encryption, qualquer JSON schema que inclua um campo criptografado resulta em um erro de análise de consulta.