getMessage(); $code = $e->getCode(); switch (get_class($e)) { case Exception\AuthenticationException::class: case Exception\ConnectionException::class: case Exception\ConnectionTimeoutException::class: case Exception\SSLConnectionException::class: $class = 'MongoConnectionException'; break; case Exception\BulkWriteException::class: case Exception\WriteException::class: $writeResult = $e->getWriteResult(); if ($writeResult) { $writeError = $writeResult->getWriteErrors()[0]; $message = $writeError->getMessage(); $code = $writeError->getCode(); } switch ($code) { // see https://github.com/mongodb/mongo-php-driver-legacy/blob/ad3ed45739e9702ae48e53ddfadc482d9c4c7e1c/cursor_shared.c#L540 case 11000: case 11001: case 12582: $class = 'MongoDuplicateKeyException'; break; default: $class = 'MongoCursorException'; } break; case Exception\ExecutionTimeoutException::class: $class = 'MongoExecutionTimeoutException'; break; default: $class = $fallbackClass; } if (strpos($message, 'No suitable servers found') !== false) { return new \MongoConnectionException($message, $code, $e); } return new $class($message, $code, $e); } }