Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual 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 para inserções e atualizações de documentos 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 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 à collection 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 ambos os documentos na collection contacts de modo que nenhum dos documentos 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 à collection 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 ambos os documentos na collection contacts de modo que nenhum dos documentos 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 é destinada ao consumo humano. Pode mudar no futuro e não deve ser invocado em scripts.

← Modificar validação de esquema