Para documentos que já existem em sua coleção antes de você adicionar a validação, você pode especificar como o MongoDB aplica as regras de validação a esses documentos.
Contexto
O validationLevel do esquema determina os documentos para os quais o MongoDB aplica regras de validação:
Nível de validação | Comportamento |
|---|---|
| O MongoDB aplica as mesmas regras de validação para inserções e atualizações de documento em documentos válidos existentes que correspondem às regras de validação. As atualizações de documentos existentes na collection que não correspondem às regras de validação não são necessárias para passar a validação. |
| (Padrão) O MongoDB aplica as mesmas regras de validação a todas as inserções e atualizações de documento . |
| O MongoDB aplica as regras de validação a todas as inserções e atualizações de documentos e garante que cada documento na coleção satisfaça as regras. Ao contrário de
Novidades na versão 9.0. |
Pré-requisitos
Os exemplos nesta página utilizam uma coleção movies. Para criar a coleção e inserir os documento que os exemplo usam, execute o seguinte comando:
db.movies.insertMany( [ { title: "The Godfather", year: 1972 }, { title: "Casablanca", year: 1942 }] )Definir validação moderada
O exemplo a seguir adiciona um validador moderate à coleção movies e insere um documento que satisfaz as regras de validação.
Especifique as regras de validação com o nível de validação moderate.
Adicione um validador à coleção movies com moderate validationLevel:
db.runCommand( { collMod: "movies", validator: { $jsonSchema: { bsonType: "object", required: [ "title" ], properties: { title: { bsonType: "string", description: "title must be a string and is required" } } } }, validationLevel: "moderate"} )Como o validationLevel é moderate, o MongoDB aplica as regras de validação a todas as inserções de documento e a atualizações de documentos existentes que já atendem às regras.
Especifique uma validação rigorosa
O exemplo a seguir adiciona um validador strict à coleção movies e insere um documento que satisfaz as regras de validação.
Especifique as regras de validação com o nível de validação strict.
Adicione um validador à coleção movies com strict validationLevel:
db.runCommand( { collMod: "movies", validator: { $jsonSchema: { bsonType: "object", required: [ "title" ], properties: { title: { bsonType: "string", description: "title must be a string and is required" } } } }, validationLevel: "strict"} )Como o validationLevel é strict, o MongoDB aplica as regras de validação a todas as inserções e atualizações de documentos.
Observação
Ao atualizar para a validação strict, o MongoDB não verifica retroativamente se os documentos existentes na coleção passam pelo validador. Após o upgrade, a coleção pode conter documentos inválidos que existiam antes do upgrade. No entanto, as operações de atualização em documentos inválidos falham devido ao validador. Para atualizar um documento inválido, primeiro resolva o problema que faz com que o validador falhe.
Especifique a validação de restrição
O exemplo a seguir atualiza a coleção movies para o nível de validação constraint. Ao atualizar para o nível constraint, o MongoDB verifica se cada documento já existente na coleção satisfaz o validador.
Observação
O procedimento a seguir se aplica a uma coleção que já existe. Se você definir validationLevel como constraint ao criar a coleção, não precisará definir o nível como strict primeiro ou preparar a coleção.
(Condicional) Defina seu validationLevel como strict.
Se o validationLevel da sua coleção ainda não for strict, siga o procedimento para especificar validação estrita.
Prepare a coleção para o nível constraint.
Execute o collMod com prepareConstraintValidationLevel definido como true:
db.runCommand( { collMod: "movies", prepareConstraintValidationLevel: true} )Este comando prepara a coleção para a atualização bloqueando bypassDocumentValidation e impedindo alterações no validador. Para aprender como o MongoDB restringe o bypass, consulte Bypass validação de esquema.
Defina o nível de validação como constraint.
Execute collMod para definir validationLevel como constraint. O validationAction deve ser error ou errorAndLog:
db.runCommand( { collMod: "movies", validationLevel: "constraint", validationAction: "error"} )Você não pode alterar o validator na mesma operação collMod que atualiza o validationLevel para o constraint. Defina as regras de validação antes de executar este comando. Para alterar as regras mais tarde, rebaixe o nível para strict, modifique as regras e, em seguida, atualize novamente para constraint.
Como o validationLevel é constraint, o MongoDB aplica as regras de validação a todas as inserções e ao atualizar documentos, independentemente de um documento existente atender às regras antes da atualização.
Ao definir o nível como constraint, o MongoDB verifica todos os documentos existentes na coleção e falha na operação collMod se qualquer documento violar o validador. Essa verificação pode ser computacionalmente cara para coleções grandes. Se a operação falhar, atualize os documentos violadores para passar pelo validador antes de continuar.
Importante
A saída de erro destina-se ao consumo humano. Pode mudar no futuro e não deve ser invocado em scripts.