Menu Docs
Página inicial do Docs
/
Manual do banco de dados
/ /

Escolha como lidar com documentos inválidos

Você pode especificar como o MongoDB lida com documentos que violam as regras de validação. Quando uma operação resultaria em um documento inválido, o MongoDB pode:

  • Rejeite qualquer inserção ou atualização que viole os critérios de validação. Este é o comportamento padrão.

  • Permita que a operação prossiga, mas registre a violação no log MongoDB.

Rejeitar documentos inválidos garante que seu esquema permaneça consistente. No entanto, em determinados cenários, talvez você queira permitir documentos inválidos, como uma migração de dados que contenha documentos anteriores à criação de um esquema.

A opção validationAction do seu esquema determina como o MongoDB lida com documentos inválidos:

Ação de validação
Comportamento

error

(Padrão) o MongoDB rejeita qualquer inserção ou atualização que viole os critérios de validação.

warn

O MongoDB permite que a operação continue, mas registra a violação no log do MongoDB.

errorAndLog

O MongoDB rejeita qualquer inserção ou atualização que viole os critérios de validação e registra o erro no arquivo de log mongod .

Novidades na versão 8.1.

Observação

Se você usar uma ação de validação errorAndLog em uma collection, o MongoDB não poderá fazer downgrade até que você solte a collection ou se você alterar a ação de validação da collection para uma suportada em versões mais antigas. Para alterar a ação de validação em uma collection, use o comando collMod.

O procedimento a seguir mostra como criar uma validação de esquema que rejeita documentos inválidos.

1

Crie uma coleção do contacts com um validador de JSON schema que tenha validationAction: "error":

db.createCollection( "contacts", {
validator: { $jsonSchema: {
bsonType: "object",
required: [ "phone" ],
properties: {
phone: {
bsonType: "string",
description: "must be a string and is required"
},
email: {
bsonType : "string",
pattern : "@mongodb\\.com$",
description: "must be a string and end with '@mongodb.com'"
}
}
} },
validationAction: "error"
} )

O error validationAction faz com que o MongoDB rejeite quaisquer documentos inválidos e evite que eles sejam inseridos na coleção.

2

Tente inserir o seguinte documento:

db.contacts.insertOne(
{ name: "Amanda", email: "amanda@xyz.com" }
)

O documento viola a regra de validação porque:

  • O campo email não corresponde ao padrão de expressão regular. O campo email deve terminar em @mongodb.com.

  • O campo obrigatório phone está faltando.

A operação falha com o seguinte erro:

MongoServerError: Document failed validation
Additional information: {
failingDocumentId: ObjectId("6377cca4aac957f2b77ea955"),
details: {
operatorName: '$jsonSchema',
schemaRulesNotSatisfied: [
{
operatorName: 'properties',
propertiesNotSatisfied: [
{
propertyName: 'email',
description: "must be a string and end with '@mongodb.com'",
details: [
{
operatorName: 'pattern',
specifiedAs: { pattern: '@mongodb\\.com$' },
reason: 'regular expression did not match',
consideredValue: 'amanda@xyz.com'
}
]
}
]
},
{
operatorName: 'required',
specifiedAs: { required: [ 'phone' ] },
missingProperties: [ 'phone' ]
}
]
}
}

O procedimento a seguir mostra como criar uma validação de esquema que permite documentos inválidos, mas registra documentos inválidos no log MongoDB.

1

Crie uma coleção do contacts2 com um validador de JSON schema que tenha validationAction: "warn":

db.createCollection( "contacts2", {
validator: { $jsonSchema: {
bsonType: "object",
required: [ "phone" ],
properties: {
phone: {
bsonType: "string",
description: "must be a string and is required"
},
email: {
bsonType : "string",
pattern : "@mongodb\\.com$",
description: "must be a string and end with '@mongodb.com'"
}
}
} },
validationAction: "warn"
} )

O warn validationAction permite que documentos inválidos sejam inseridos na collection. Os documentos inválidos são registrados no log do MongoDB.

2

Tente inserir o seguinte documento:

db.contacts2.insertOne(
{ name: "Amanda", email: "amanda@xyz.com" }
)

O documento viola a regra de validação porque:

  • O campo email não corresponde ao padrão de expressão regular. O campo email deve terminar em @mongodb.com.

  • O campo obrigatório phone está faltando.

3

Para visualizar os logs do MongoDB em um formato legível, execute o seguinte comando:

db.adminCommand(
{ getLog:'global'} ).log.forEach(x => { print(x) }
)

O log MongoDB inclui uma entrada semelhante ao seguinte objeto:

{
"t": {
"$date": "2022-11-18T13:30:43.607-05:00"
},
"s": "W",
"c": "STORAGE",
"id": 20294,
"ctx": "conn2",
"msg": "Document would fail validation",
"attr": {
"namespace": "test.contacts2",
"document": {
"_id": {
"$oid": "6377cf53d59841355cac1cd0"
},
"name": "Amanda",
"email": "amanda@xyz.com"
},
"errInfo": {
"failingDocumentId": {
"$oid": "6377cf53d59841355cac1cd0"
},
"details": {
"operatorName": "$jsonSchema",
"schemaRulesNotSatisfied": [{
"operatorName": "properties",
"propertiesNotSatisfied": [{
"propertyName": "email",
"description": "must be a string and end with '@mongodb.com'",
"details": [{
"operatorName": "pattern",
"specifiedAs": {
"pattern": "@mongodb\\.com$"
},
"reason": "regular expression did not match",
"consideredValue": "amanda@xyz.com"
}]
}]
}, {
"operatorName": "required",
"specifiedAs": {
"required": ["phone"]
},
"missingProperties": ["phone"]
}]
}
}
}
}

Voltar

Especificar nível de validação

Nesta página