Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

Dicas para a validação de esquema JSON

Nesta página

  • _id Campo e additionalProperties: false
  • Validação para valores de campo null
  • Validação com campos criptografados

Esta página descreve as melhores práticas para validação de esquema JSON para ajudar a evitar problemas comuns.

Quando você especifica additionalProperties: false em seu esquema JSON, 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
}
}

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.

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.

Voltar

Especifique valores de campo