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 documentos.
moderate
O MongoDB aplica as mesmas regras de validação a inserções e atualizações de documentos válidos existentes que correspondem às regras de validação. As atualizações em documentos existentes na coleção que não correspondam às regras de validação não são verificadas quanto à validade.

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

← Modificar validação de esquema