Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ /

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

Nesta página

  • Contexto
  • Pré-requisitos
  • Etapas: usar a validação strict
  • Etapas: usar a validação moderate
  • Saiba mais

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 seu esquema determina os documentos para os quais o MongoDB aplica as regras de validação:

Nível de validação
Comportamento

strict

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

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.

Os exemplos nesta página utilizam uma collection contacts com estes documentos:

db.contacts.insertMany([
{ "_id": 1, "name": "Anne", "phone": "+1 555 123 456", "city": "London", "status": "Complete" },
{ "_id": 2, "name": "Ivan", "city": "Vancouver" }
])

O exemplo a seguir adiciona uma validação strict à coleção contacts e mostra os resultados ao tentar atualizar documentos inválidos.

1

Adicione um validador à coleção contacts com strict validationLevel:

db.runCommand( {
collMod: "contacts",
validator: { $jsonSchema: {
bsonType: "object",
required: [ "phone", "name" ],
properties: {
phone: {
bsonType: "string",
description: "phone must be a string and is required"
},
name: {
bsonType: "string",
description: "name must be a string and is required"
}
}
} },
validationLevel: "strict"
} )

Como o validationLevel é strict, quando qualquer documento é atualizado, o MongoDB verifica esse documento para validação.

2

Os comandos de atualização a seguir modificam os dois documento na coleção contacts de forma que nenhum deles seja consistente com a regra de validação, que exige que name seja uma string:

db.contacts.updateOne(
{ _id: 1 },
{ $set: { name: 10 } }
)
db.contacts.updateOne(
{ _id: 2 },
{ $set: { name: 20 } }
)
3

Ambas as operações de atualização falham. O MongoDB retorna a seguinte saída para cada operação:

MongoServerError: Document failed validation
Additional information: {
failingDocumentId: <id>,
details: {
operatorName: '$jsonSchema',
schemaRulesNotSatisfied: [
{
operatorName: 'properties',
propertiesNotSatisfied: [
{
propertyName: 'name',
description: 'name must be a string and is required',
details: [
{
operatorName: 'bsonType',
specifiedAs: { bsonType: 'string' },
reason: 'type did not match',
consideredValue: <value>,
consideredType: 'int'
}
]
}
]
},
{
operatorName: 'required',
specifiedAs: { required: [ 'phone', 'name' ] },
missingProperties: [ 'phone' ]
}
]
}
}

O exemplo a seguir adiciona uma validação moderate à coleção contacts e mostra os resultados ao tentar atualizar documentos inválidos.

1

Adicione um validador à coleção contacts com moderate validationLevel:

db.runCommand( {
collMod: "contacts",
validator: { $jsonSchema: {
bsonType: "object",
required: [ "phone", "name" ],
properties: {
phone: {
bsonType: "string",
description: "phone must be a string and is required"
},
name: {
bsonType: "string",
description: "name must be a string and is required"
}
}
} },
validationLevel: "moderate"
} )

Porque o validationLevel é moderate:

  • Se você atualizar o documento com _id: 1, o MongoDB aplicará as novas regras de validação porque o documento existente atende aos requisitos de validação.

  • Se você atualizar o documento com _id: 2, o MongoDB não aplicará as novas regras de validação porque o documento existente não atende aos requisitos de validação.

2

Os comandos de atualização a seguir modificam os dois documento na coleção contacts de forma que nenhum deles seja consistente com a regra de validação, que exige que name seja uma string:

db.contacts.updateOne(
{ _id: 1 },
{ $set: { name: 10 } }
)
db.contacts.updateOne(
{ _id: 2 },
{ $set: { name: 20 } }
)
3

O MongoDB retorna a seguinte saída para cada operação:

// _id: 1
MongoServerError: Document failed validation
Additional information: {
failingDocumentId: 1,
details: {
operatorName: '$jsonSchema',
schemaRulesNotSatisfied: [
{
operatorName: 'properties',
propertiesNotSatisfied: [
{
propertyName: 'name',
description: 'name must be a string and is required',
details: [
{
operatorName: 'bsonType',
specifiedAs: { bsonType: 'string' },
reason: 'type did not match',
consideredValue: 10,
consideredType: 'int'
}
]
}
]
}
]
}
}
// _id: 2
{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 0,
upsertedCount: 0
}

A saída mostra:

  • A atualização falha no documento com _id: 1. Este documento atendeu aos requisitos de validação inicial e o MongoDB aplica regras de validação a este documento.

  • A atualização do documento com _id: 2 é bem-sucedida. Este documento não atendeu aos requisitos de validação inicial e o MongoDB não aplica regras de validação a este documento.

Importante

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

  • Escolha como lidar com documentos inválidos

  • Modificar validação de esquema

Voltar

Especificar operadores de query