Menu Docs

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

Ignorar validação de esquema

Nesta página

  • Contexto
  • Operações suportadas
  • Pré-requisitos
  • Passos
  • Resultados
  • Saiba mais

Em algumas situações, talvez seja necessário ignorar as regras de validação do esquema de uma coleção. Por exemplo, se você estiver restaurando dados potencialmente inválidos de uma cópia de segurança para uma coleção que tem regras de validação. Nesse cenário, documentos antigos podem não atender aos novos requisitos de validação.

Ignorar a validação do esquema é feito por operação. Se você ignorar a validação do esquema para inserir um documento inválido, qualquer atualização futura no documento inválido deverá:

  • Ignore também a validação do esquema

  • Resultado em um documento válido

Você pode usar os seguintes comandos e métodos para ignorar a validação por operação:

Para sistemas que habilitaram o controle de acesso, para ignorar a validação do documento, o usuário autenticado deve ter a açãobypassDocumentValidation. Os papéis embutidos dbAdmin e restore fornecem esta ação.

O exemplo a seguir cria uma coleção com validação de esquema e, em seguida, insere um documento inválido ignorando as regras de validação.

1

Crie uma coleção students e use o operador $jsonSchema para definir regras de validação de esquema:

db.createCollection("students", {
validator: {
$jsonSchema: {
bsonType: "object",
required: [ "name", "year", "major", "address" ],
properties: {
name: {
bsonType: "string",
description: "must be a string and is required"
},
year: {
bsonType: "int",
minimum: 2017,
maximum: 3017,
description: "must be an integer in [ 2017, 3017 ] and is required"
}
}
}
}
} )
2

O seguinte documento é inválido porque o campo year está fora dos limites permitidos (2017-3017):

{
name: "Alice",
year: Int32( 2016 ),
major: "History",
gpa: Double(3.0),
address: {
city: "NYC",
street: "33rd Street"
}
}

Para ignorar as regras de validação e inserir o documento inválido, execute o seguinte comando insert, que define a opção bypassDocumentValidation como true:

db.runCommand( {
insert: "students",
documents: [
{
name: "Alice",
year: Int32( 2016 ),
major: "History",
gpa: Double(3.0),
address: {
city: "NYC",
street: "33rd Street"
}
}
],
bypassDocumentValidation: true
} )

Para confirmar que o documento foi inserido com sucesso, consulte a coleção students:

db.students.find()

O MongoDB retorna o documento inserido:

[
{
_id: ObjectId("62bcb4db3f7991ea4fc6830e"),
name: 'Alice',
year: 2016,
major: 'History',
gpa: 3,
address: { city: 'NYC', street: '33rd Street' }
}
]
← Consultar e modificar documentos válidos ou inválidos