Um dos novos recursos do MongoDB 3.6 é o validador jsonSchema. Eu posso criar uma coleção com um validador como:
{
"validator": {
"$jsonSchema": {
"properties": {
"name": {
"bsonType": "string",
"description": "name"
},
"age": {
"bsonType": "int",
"minimum": 10,
"maximum": 30
}
},
"required": ["name", "age"],
"bsonType": "object"
}
}
}
Mas e se a coleção já existisse com alguns documentos, que não preenchem o esquema de validação? Como posso descobrir todos os documentos inválidos com base no validador?
Você pode usar o
$jsonSchema
operador de consulta para localizar documentos relevantes.Por exemplo, usando o
mongo
shell:Da mesma forma, você pode usar o
$jsonSchema
operador de consulta para confirmar as correspondências esperadas antes de adicionar ou atualizar o validador de uma coleção:Conforme
MongoDB
documentado aqui Para especificar a validação do esquema JSON, use o operador $jsonSchema na expressão do validador.Por exemplo, o exemplo a seguir especifica regras de validação usando
JSON
esquema:Ou como posso ver em seu código, a validação do jsonSchema.
Além da validação do esquema JSON, o MongoDB oferece suporte à validação com expressões de filtro de consulta usando os operadores de consulta , com exceção de $near , $nearSphere , $text e $where .
A validação ocorre durante
updates
einserts
. Quando você adiciona validação a uma coleção, os documentos existentes não passam por verificações de validação até a modificação.Para documentos existentes
A
validationLevel
opção determina quais operações o MongoDB aplica as regras de validação:validationLevel
forstrict
(o padrão), o MongoDB aplica regras de validação a todas as inserções e atualizações.validationLevel
formoderate
, o MongoDB aplica regras de validação para inserções e atualizações de documentos existentes que já atendem aos critérios de validação. Com o nível moderado, as atualizações de documentos existentes que não atendem aos critérios de validação não são verificadas quanto à validade.Por exemplo, crie uma coleção de contatos com os seguintes documentos:
Emita o seguinte comando para adicionar um
validator
à coleção de contatos:A coleção de contatos agora tem um validador com o nível de validação moderado:
Se você tentasse atualizar o documento com
_id
,1
o MongoDB aplicaria as regras de validação, pois o documento existente corresponde aos critérios. Por outro lado, o MongoDB não aplicará regras de validação para atualizações do documento com_id
,2
pois ele não atende às regras de validação.Para desabilitar
validation entirely
, você pode definirvalidationLevel
comooff
.Para aceitar ou rejeitar documentos inválidos
A
validationAction
opção determina como o MongoDB lida com documentos que violam as regras de validação:validationAction
forerror
(o padrão), o MongoDB rejeita qualquer inserção ou atualização que viole os critérios de validação.validationAction
forwarn
, o MongoDB registra quaisquer violações, mas permite que a inserção ou atualização continue.Por exemplo, crie uma
contacts2
coleção com o seguinte validador de esquema JSON:Com o , o MongoDB registra quaisquer violações, mas permite que a inserção ou atualização prossiga.
warn
validationAction
Por exemplo, a seguinte operação de inserção viola a regra de validação:
No entanto, como o
validationAction
iswarn
only, o MongoDB apenas registra a mensagem de violação de validação e permite que a operação continue:Para sua referência adicional com a validação do jsonSchema aqui , aqui e aqui