Tratamento de erros de operação
Nesta página
Visão geral
Esta página descreve os erros que você pode encontrar ao usar o MongoDB Rust Driver para executar operações do MongoDB. Depois de entender os tipos de erros de operação que o driver gera, você pode tomar a ação apropriada para gerenciá-los ou corrigir o código que causa o erro.
Observação
Esta página aborda apenas o tratamento de erros de operação. Se você encontrar qualquer outro problema com o MongoDB ou com o driver, acesse os seguintes recursos:
Solução de problemas de conexão para possíveis soluções para problemas que você pode encontrar ao se conectar a uma implementação do MongoDB
Página de Problemas e Ajuda para obter informações sobre como reportar bugs, contribuir para o driver e encontrar mais recursos
Fóruns daMongoDB Community para perguntas, discussões ou suporte técnico geral
Tipo de erro
Se o driver encontrar um erro ao executar uma operação, ele retornará um erro do tipo Erro.
O tipo Error
contém o campo kind
, que descreve o tipo de erro que ocorreu. O kind
campo tem um valor de enum ErrorKind. O enum ErrorKind
tem variantes para diferentes tipos de erros, incluindo os seguintes:
InvalidArgument
: você forneceu um argumento inválido para um métodoAuthentication
: o driver encontrou um erro durante a autenticaçãoServerSelection
: o cliente não conseguiu selecionar um servidor para a operaçãoWrite
: ocorreu um erro durante uma operação de escritaTransaction
: ocorreu um erro durante uma transação
Por exemplo, se você tentar executar uma operação de inserção que duplica um valor de campo _id
que já está na collection, o driver retornará uma instância Error
e imprimirá a seguinte mensagem de erro:
Error: Error { kind: Write(WriteError(WriteError { code: 11000, code_name: None, message: "E11000 duplicate key error collection: db.test_coll index: _id_ dup key: { _id: 1 }", details: None })), labels: {}, wire_version: None, source: None }
Na mensagem de erro anterior, o valor do campo kind
é Write
. Para saber mais sobre esse tipo de erro, consulte a seção Tipos de erro de gravação deste guia.
Erros de conexão
Um erro de operação simultânea pode limpar o pool de conexões, interrompendo sua conexão com o servidor. Nessa situação, o driver gera um tipo Error
no qual o valor do campo kind
é ConnectionPoolCleared
. A mensagem de erro descreve o motivo da falha da operação simultânea.
Para saber como ajustar seu pool de conexões para resolver esse erro, consulte Tuting Your Connection Pool Settings no manual do Servidor MongoDB.
Dependendo das circunstâncias que produzem o erro, o driver pode adicionar um rótulo RetryableWriteError
ao erro, conforme mostrado na seguinte mensagem de erro:
Error { kind: ConnectionPoolCleared { message: "Connection pool for localhost:27017 cleared because another operation failed with: Kind: I/O error: timed out, labels: {}" }, labels: {"RetryableWriteError"}, wire_version: None, source: None }
Essa etiqueta indica que o erro pode ser gravado novamente, o que significa que o driver faz uma tentativa de repetição.
Tipos de erro de gravação
Quando o driver experimenta um erro ao executar uma operação de gravação, ele gera uma instância Error
com um valor de campo kind
de Write
. O corpo da Write
variante é o enum WriteFailure, que recebe um valor do tipo WriteError ou WriteConcernError.
Erro de preocupação de gravação
O driver gera um erro WriteConcernError
quando você executa uma operação de gravação e o driver não consegue satisfazer a referência de escrita especificada. Por exemplo, se você especificar uma write concern de majority
para operações em um conjunto de réplicas com três nós, o driver retornará esse erro se a operação de escrita se propagar apenas para um nó.
Para saber mais sobre write concerns, consulte Write Concern no manual do servidor MongoDB.
WriteError
O driver gera um erro WriteError
para quaisquer erros encontrados ao executar uma operação de gravação que não estejam relacionadas à satisfazer a write concern. Como há muitas causas para esse erro, o tipo WriteError
contém campos que descrevem o tipo de erro de gravação e o motivo do erro.
Por exemplo, o driver gera um erro WriteError
se você tentar inserir um documento em uma collection que viole as regras de validação de esquema da collection. Suponha que a collection tenha uma regra em que o valor do campo quantity
deve ser um tipo int
. Se você tentar inserir um documento onde o valor de quantity
é "three"
, o driver imprimirá a seguinte mensagem de erro:
Error: Error { kind: Write(WriteError(WriteError { code: 121, code_name: None, message: "Document failed validation", details: Some(Document({"failingDocumentId": Int32(1), "details": Document({"operatorName": String("$jsonSchema"), "title": String("Numerical Validation"), "schemaRulesNotSatisfied": Array(...)})})) })), labels: {}, wire_version: None, source: None }
Na mensagem de erro anterior, o campo message
descreve o motivo do erro e o campo details
fornece detalhes específicos sobre a operação com falha. Para resolver esse erro, você deve revisar o documento para aderir às regras de validação do esquema ou ignorar a validação.
Para saber mais sobre validação de esquema, consulte o guia sobre Validação de Esquema.