Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

Modificar validação de esquema

Nesta página

  • Sobre esta tarefa
  • Passos
  • Crie uma coleta com validação.
  • Modifique o esquema de validação.
  • Resultados
  • Inserir um documento inválido
  • Inserir um documento válido
  • Lidar com um documento anteriormente válido que não é mais válido
  • Saiba mais

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 do esquema de uma coleta, use o comando collMod e especifique a validação atualizada no objeto validator.

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.

O procedimento a seguir cria uma coleta com regras de validação e modifica essas regras.

1

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"
}
}
}
}
} )
2

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.

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.

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'
}
]
}
]
}
]
}
}

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"
}
)

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.

← Visualizar regras de validação existentes