Modificar validação de esquema
Nesta página
Depois de adicionar a validação do esquema a uma coleta, você pode modificar as regras de validação a qualquer momento. Por exemplo, você pode decidir:
Que os documentos em uma coleta
users
não exigem mais um endereço de e-mail.Para aumentar o comprimento mínimo de um campo
password
de 8 caracteres para 12.
Para modificar a validação de esquema de uma coleta, use o comando collMod
e especifique a validação atualizada no objeto validator
.
Sobre esta tarefa
Você pode modificar todos os componentes de uma validação de esquema, incluindo suas regras, nível de validação e ação de validação.
Se você atualizar as regras de validação de uma collection, os documentos inseridos antes da alteração de validação podem não ser mais válidos. Como o MongoDB lida com esses documentos inválidos depende do seu validationLevel
. Por padrão, o MongoDB aplica verificações de validação a todos os documentos, independentemente de quando foram inseridos.
Passos
O procedimento a seguir cria uma coleta com regras de validação e modifica essas regras.
Crie uma coleta com validação.
Crie uma collection users
com regras de validação:
db.createCollection("users", { validator: { $jsonSchema: { bsonType: "object", required: [ "username", "password" ], properties: { username: { bsonType: "string", description: "must be a string and is required" }, password: { bsonType: "string", minLength: 8, description: "must be a string at least 8 characters long, and is required" } } } } } )
Modifique o esquema de validação.
Execute o seguinte comando collMod
para alterar o minLength
do campo password
de 8 para 12:
db.runCommand( { collMod: "users", validator: { $jsonSchema: { bsonType: "object", required: [ "username", "password" ], properties: { username: { bsonType: "string", description: "must be a string and is required" }, password: { bsonType: "string", minLength: 12, description: "must be a string of at least 12 characters, and is required" } } } } } )
Dica
Você também pode utilizar o comando collMod
para adicionar validação a uma collection existente que não foi criada com validação.
Resultados
As seções a seguir mostram os resultados da validação atualizada nestes cenários:
Ao inserir um documento inválido.
Ao inserir um documento válido.
Quando um documento válido anteriormente se torna inválido devido às alterações da regra de validação.
Inserir um documento inválido
A operação a seguir tenta inserir um documento inválido. O documento é inválido porque o campo password
tem 10 caracteres quando o comprimento mínimo é 12:
db.users.insertOne( { "username": "salesAdmin01", "password": "kT9$j4wg#M" } )
O MongoDB retorna o seguinte erro:
MongoServerError: Document failed validation Additional information: { failingDocumentId: ObjectId("62be0adb73c105dde9231299"), details: { operatorName: '$jsonSchema', schemaRulesNotSatisfied: [ { operatorName: 'properties', propertiesNotSatisfied: [ { propertyName: 'password', description: 'must be a string of at least 8 characters, and is required', details: [ { operatorName: 'minLength', specifiedAs: { minLength: 12 }, reason: 'specified string length was not satisfied', consideredValue: 'kT9$j4wg#M' } ] } ] } ] } }
Inserir um documento válido
A operação a seguir insere um documento válido, onde o campo password
tem pelo menos 12 caracteres:
db.users.insertOne( { "username": "salesAdmin01", "password": "8p&SQd7T90$KKx" } )
Lidar com um documento anteriormente válido que não é mais válido
Considere o seguinte documento válido para a primeira versão da validação do esquema, mas não para o segundo:
db.users.insertOne( { "username": "salesAdmin02", "password": "i8U60*VyL8" } )
O campo password
do documento tem 10 caracteres. A primeira versão da validação do esquema exigia um mínimo de 8 caracteres, o que significa que este documento era válido. No entanto, após atualizar a validação para exigir que o password
tenha no mínimo 12 caracteres, o documento não é mais válido.
Quando uma alteração na validação de esquema faz com que documentos anteriormente válidos se tornem inválidos, os documentos recém-inválidos permanecem na coleta.
A maneira como o MongoDB lida com documentos recentemente inválidos depende do validationLevel
do esquema. A validação do esquema neste exemplo usa o padrão validationLevel
de strict
, o que significa que o documento deve corresponder às novas regras de validação. O MongoDB verifica a validação cada vez que o documento é atualizado.
Se a validação do esquema atualizada tivesse um validationLevel
de moderate
, este documento não precisaria corresponder às novas regras de validação.