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); } if ($message === "cannot use 'w' > 1 when a host is not replicated") { return new \MongoWriteConcernException($message, $code, $e); } return new $class($message, $code, $e); } /** * Converts an exception to * * @param Exception\Exception $e * @return array */ public static function toResultArray(Exception\Exception $e) { return [ 'ok' => 0.0, 'errmsg' => $e->getMessage(), 'code' => $e->getCode(), ]; } }