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