# MongoDB::Error - phpMan

## NAME
    [MongoDB::Error] - MongoDB Driver Error classes

## VERSION
    version v2.2.2

## SYNOPSIS
        use [MongoDB::Error];
        [MongoDB::Error]->throw("a generic error");
        [MongoDB::DatabaseError]->throw(
            message => $string,
            result => $hashref,
        );

## DESCRIPTION
    This class defines a hierarchy of exception objects.

## USAGE
    Unless otherwise explicitly documented, all driver methods throw
    exceptions if an error occurs.

    To catch and handle errors, the [Try::Tiny] and [Safe::Isa] modules are
    recommended:

        use [Try::Tiny];
        use [Safe::Isa]; # provides $_isa

        try {
            $coll->insert( $doc )
        }
        catch {
            if ( $_->$_isa("[MongoDB::DuplicateKeyError]" ) ) {
                ...
            }
            else {
                ...
            }
        };

    To retry failures automatically, consider using [Try::Tiny::Retry].

## EXCEPTION HIERARCHY
        [MongoDB::Error]
            |
            |->[MongoDB::AuthError]
            |
            |->[MongoDB::ConnectionError]
            |   |
            |   |->[MongoDB::HandshakeError]
            |   |
            |   |->[MongoDB::NetworkError]
            |
            |->[MongoDB::ConfigurationError]
            |
            |->[MongoDB::DatabaseError]
            |   |
            |   |->[MongoDB::CursorNotFoundError]
            |   |
            |   |->[MongoDB::DuplicateKeyError]
            |   |
            |   |->[MongoDB::NotMasterError]
            |   |
            |   |->[MongoDB::WriteError]
            |   |
            |   |->[MongoDB::WriteConcernError]
            |
            |->[MongoDB::DecodingError]
            |
            |->[MongoDB::DocumentError]
            |
            |->[MongoDB::GridFSError]
            |
            |->[MongoDB::InternalError]
            |
            |->[MongoDB::InvalidOperationError]
            |
            |->[MongoDB::ProtocolError]
            |
            |->[MongoDB::SelectionError]
            |
            |->[MongoDB::TimeoutError]
            |   |
            |   |->[MongoDB::ExecutionTimeout]
            |   |
            |   |->[MongoDB::NetworkTimeout]
            |
            |->[MongoDB::UsageError]

    All classes inherit from "[MongoDB::Error]".

    All error classes have the attribute:

    *   message — a text representation of the error

  [MongoDB::AuthError]
    This error indicates a problem with authentication, either in the
    underlying mechanism or a problem authenticating with the server.

  [MongoDB::ConnectionError]
    Errors related to network connections.

   [MongoDB::HandshakeError]
    This error is thrown when a connection has been made, but SSL or
    authentication handshakes fail.

   [MongoDB::NetworkError]
    This error is thrown when a socket error occurs, when the wrong number
    of bytes are read, or other wire-related errors occur.

  [MongoDB::ConfigurationError]
    This error is thrown when there is a configuration error between the
    MongoDB deployment and the configuration of the client, such as when
    trying to use explicit sessions on a MongoDB < 3.6

  [MongoDB::CursorNotFoundError]
    This error indicates that a cursor timed out on a server.

  [MongoDB::DatabaseError]
    Errors related to database operations. Specifically, when an error of
    this type occurs, the driver has received an error condition from the
    server.

    Attributes include:

    *   result — response from a database command; this must implement the
        "last_errmsg" method

    *   code — numeric error code; see "ERROR CODES"; if no code was
        provided by the database, the "UNKNOWN_ERROR" code will be
        substituted instead

   [MongoDB::DuplicateKeyError]
    This error indicates that a write attempted to create a document with a
    duplicate key in a collection with a unique index. The "result"
    attribute is a result object.

   [MongoDB::NotMasterError]
    This error indicates that a write or other state-modifying operation was
    attempted on a server that was not a primary. The "result" attribute is
    a [MongoDB::CommandResult] object.

   [MongoDB::WriteError]
    Errors indicating failure of a write command. The "result" attribute is
    a result object.

   [MongoDB::WriteConcernError]
    Errors indicating failure of a write concern. The "result" attribute is
    a result object.

  [MongoDB::DecodingError]
    This error indicates a problem during BSON decoding; it wraps the error
    provided by the underlying BSON encoder. Note: Encoding errors will be
    thrown as a "[MongoDB::DocumentError]".

  [MongoDB::DocumentError]
    This error indicates a problem with a document to be inserted or
    replaced into the database, or used as an update document.

    Attributes include:

    *   document — the document that caused the error

  [MongoDB::GridFSError]
    Errors related to GridFS operations, such a corrupted file.

  [MongoDB::InternalError]
    Errors that indicate problems in the driver itself, typically when
    something unexpected is detected. These should be reported as potential
    bugs.

  [MongoDB::ProtocolError]
    Errors related to the MongoDB wire protocol, typically problems parsing
    a database response packet.

  [MongoDB::SelectionError]
    When server selection fails for a given operation, this is thrown. For
    example, attempting a write when no primary is available or reading with
    a specific mode and tag set and no servers match.

  [MongoDB::TimeoutError]
    These errors indicate a user-specified timeout has been exceeded.

   [MongoDB::ExecutionTimeout]
    This error is thrown when a query or command fails because "max_time_ms"
    has been reached. The "result" attribute is a [MongoDB::CommandResult]
    object.

   [MongoDB::NetworkTimeout]
    This error is thrown when a network operation exceeds a timeout,
    typically "connect_timeout_ms" or "socket_timeout_ms".

  [MongoDB::UsageError]
    Indicates invalid arguments or configuration options. Not all usage
    errors will throw this — only ones originating directly from the
    MongoDB::* library files. Some type and usage errors will originate from
    the [Type::Tiny] library if the objects are used incorrectly.

    Also used to indicate usage errors for transaction commands.

## ERROR CODES
    The following error code constants are automatically exported by this
    module.

            BAD_VALUE                 => 2,
            UNKNOWN_ERROR             => 8,
            NAMESPACE_NOT_FOUND       => 26,
            EXCEEDED_TIME_LIMIT       => 50,
            COMMAND_NOT_FOUND         => 59,
            WRITE_CONCERN_ERROR       => 64,
            NOT_MASTER                => 10107,
            DUPLICATE_KEY             => 11000,
            DUPLICATE_KEY_UPDATE      => 11001, # legacy before 2.6
            DUPLICATE_KEY_CAPPED      => 12582, # legacy before 2.6
            UNRECOGNIZED_COMMAND      => 13390, # mongos error before 2.4
            NOT_MASTER_NO_SLAVE_OK    => 13435,
            NOT_MASTER_OR_SECONDARY   => 13436,
            CANT_OPEN_DB_IN_READ_LOCK => 15927,

    This is a very, very small subset of error codes possible from the
    server, but covers some of the more common ones seen by drivers.

    Note:

    *   Only "[MongoDB::DatabaseError]" objects have a "code" attribute.

    *   The database uses multiple write concern error codes. The driver
        maps them all to WRITE_CONCERN_ERROR for consistency and
        convenience.

## ERROR LABELS
    From MongoDB 4.0 onwards, errors may contain an error labels field. This
    field is populated for extra information from either the server or the
    driver, depending on the error.

    Known error labels include (but are not limited to):

    *   "TransientTransactionError" - added when network errors are
        encountered inside a transaction.

    *   "UnknownTransactionCommitResult" - added when a transaction commit
        may not have been able to satisfy the provided write concern.

## AUTHORS
    *   David Golden <<david@mongodb.com>>

    *   Rassi <<rassi@mongodb.com>>

    *   Mike Friedman <<friedo@friedo.com>>

    *   Kristina Chodorow <<k.chodorow@gmail.com>>

    *   Florian Ragwitz <<rafl@debian.org>>

## COPYRIGHT AND LICENSE
    This software is Copyright (c) 2020 by MongoDB, Inc.

    This is free software, licensed under:

      The Apache License, Version 2.0, January 2004

