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.
Menu Docs

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

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.

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 documento e garante que cada documento na coleção satisfaça as regras. Ao contrário de strict, uma collection 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.

  • Não é possível modificar as regras de validação de esquema enquanto o nível for constraint. Para alterar suas regras de validação, faça downgrade para strict, modifique as regras e, em seguida, atualize de volta para constraint.

Novidades na versão 9.0.

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

O exemplo a seguir adiciona um validador moderate à coleção movies e insere um documento que satisfaça 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 às atualizações de documentos existentes que já atendem às regras.

2

O seguinte comando de inserção adiciona um documento que inclui um campo title com um valor de string, 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 retorna uma saída semelhante a esta:

{
acknowledged: true,
insertedId: ...
}

O exemplo a seguir adiciona um validador strict à coleção movies e insere um documento que satisfaça 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 documento .

2

O seguinte comando de inserção adiciona um documento que inclui um campo title com um valor de string, 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 retorna uma saída semelhante a esta:

{
acknowledged: true,
insertedId: ...
}

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.

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.

1

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

2

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.

3

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.

4

O seguinte comando de inserção adiciona um documento que inclui um campo title com um valor de string, 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 retorna uma saída semelhante a esta:

{
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.