Para documentos que já existem em sua coleta antes de adicionar 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 documento 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 collection movies. Para criar a coleção e inserir os documentos que os exemplos usam, execute o seguinte comando:
db.movies.insertMany( [ { title: "The Godfather", year: 1972 }, { title: "Casablanca", year: 1942 } ] )
Especifique uma validação moderada
O exemplo a seguir adiciona um validador moderate à coleção movies e insere um documento que satisfaça 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 às atualizações de documentos existentes que já atendem às regras.
Especifique a validação rigorosa
O exemplo a seguir adiciona um validador strict à coleção movies e insere um documento que satisfaça 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 documento .
Observação
Quando você atualiza para a validação strict, o MongoDB não verifica retroativamente se os documentos existentes na collection passam pelo validador. Após a atualização, a collection pode conter documentos inválidos que existiam antes da atualização. 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 falha no validador.
Especificar 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 que já está na coleção satisfaz o validador.
Observação
O procedimento a seguir se aplica a uma collection que já existe. Se você definir o validationLevel como constraint ao criar a collection, não será necessário definir o nível como strict primeiro ou preparar a collection.
(Condicional) Defina seu validationLevel como strict.
Se o validationLevel da sua collection ainda não for strict, siga o procedimento para especificar a validação estrita.
Prepare a collection para o nível constraint.
Execute collMod com prepareConstraintValidationLevel definido como true:
db.runCommand( { collMod: "movies", prepareConstraintValidationLevel: true } )
Este comando prepara a collection para a atualização bloqueando bypassDocumentValidation e evitando alterações no validador.
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" } )
Não é possível alterar validator na mesma operação collMod que atualiza validationLevel para constraint. Defina as regras de validação antes de executar este comando. Para alterar as regras mais tarde, faça downgrade do nível para strict, modifique as regras e, em seguida, atualize de volta para constraint.
Como o validationLevel é constraint, o MongoDB aplica as regras de validação a todas as inserções e atualizações de documento , independentemente de um documento existente atender às regras antes da atualização.
Quando você define o nível como constraint, o MongoDB verifica todos os documentos existentes na coleção e falha na operação collMod se algum documento violar o validador. Essa varredura pode ser computacionalmente cara para grandes coleções. 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.