Especificar nĆvel de validaĆ§Ć£o para documentos existentes
Nesta pƔgina
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.
Contexto
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. |
PrƩ-requisitos
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" } ])
Etapas: usar a strict
validaĆ§Ć£o
O exemplo a seguir adiciona uma validaĆ§Ć£o strict
Ć coleĆ§Ć£o contacts
e mostra os resultados ao tentar atualizar documentos invƔlidos.
Especifique as regras de validaĆ§Ć£o com o strict
nĆvel de validaĆ§Ć£o.
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.
Teste a validaĆ§Ć£o.
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 } } )
Observe os resultados.
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' ] } ] } }
Etapas: usar a moderate
validaĆ§Ć£o
O exemplo a seguir adiciona uma validaĆ§Ć£o moderate
Ć coleĆ§Ć£o contacts
e mostra os resultados ao tentar atualizar documentos invƔlidos.
Especifique as regras de validaĆ§Ć£o com o moderate
nĆvel de validaĆ§Ć£o.
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.
Teste a validaĆ§Ć£o.
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 } } )
Observe os resultados.
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.