Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.

Especificar nível de validação para documentos existentes

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.

O validationLevel do esquema determina os documentos para os quais o MongoDB aplica regras de validação:

Nível de validação
Comportamento

moderate

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.

strict

(Padrão) O MongoDB aplica as mesmas regras de validação a todas as inserções e atualizações de documento .

constraint

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 strict, uma coleção com validação constraint não pode conter documentos que eram inválidos antes de você definir o nível. Este nível adiciona as seguintes restrições:

  • A ação de validação deve ser error ou errorAndLog.

  • Você não pode modificar as regras de validação de esquema enquanto o nível for constraint. Para alterar suas regras de validação, faça o downgrade para strict, modifique as regras e, em seguida, faça o upgrade de volta para constraint.

  • Você não pode ignorar a validação de documento. Para obter mais informações, consulte Ignorar validação de esquema.

Novidades na versão 9.0.

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 }] )

O exemplo a seguir adiciona um validador moderate à coleção movies e insere um documento que satisfaz as regras de validação.

1

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.

2

O comando de inserção a seguir adiciona um documento que inclui um campo title com um valor de string, o que satisfaz a regra de validação:

db.movies.insertOne( { title: "Wings", year: 1927 })
3

A inserção é bem-sucedida porque o documento satisfaz as regras de validação. O MongoDB gera uma saída semelhante ao seguinte:

{ acknowledged: true, insertedId: ...}

O exemplo a seguir adiciona um validador strict à coleção movies e insere um documento que satisfaz as regras de validação.

1

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.

2

O comando de inserção a seguir adiciona um documento que inclui um campo title com um valor de string, o que satisfaz a regra de validação:

db.movies.insertOne( { title: "The Conversation", year: 1974 })
3

A inserção é bem-sucedida porque o documento satisfaz as regras de validação. O MongoDB gera uma saída semelhante ao seguinte:

{ acknowledged: true, insertedId: ...}

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.

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.

1

Se o validationLevel da sua coleção ainda não for strict, siga o procedimento para especificar validação estrita.

2

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.

3

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.

4

O comando de inserção a seguir adiciona um documento que inclui um campo title com um valor de string, o que satisfaz a regra de validação:

db.movies.insertOne( { title: "Sunrise", year: 1927 })
5

A inserção é bem-sucedida porque o documento satisfaz as regras de validação. O MongoDB gera uma saída semelhante ao seguinte:

{ acknowledged: true, insertedId: ...}

Importante

A saída de erro destina-se ao consumo humano. Pode mudar no futuro e não deve ser invocado em scripts.