1

我们正在将 API 的 MongoDB 托管服务提供商从mLab 更新MongoDB Atlas

我已经使用 MongoDB PHP 扩展 1.7.4 将我们的连接服务器更新到 PHP 7.4。

我已经使用 DoctrineMongoODMModule将我们的 API 框架从 Apigility 更新为 Laminas API 工具

我可以使用以下语法使用 mongo shell 成功连接:

mongo "mongodb+srv://test-server-dbteb.mongodb.net/<dbname>" --username <username>

我已经四处寻找 DoctrineMongoODMModule的示例配置,它的配置文件mongo+srv://使用该协议连接到 MongoDB Atlas 副本集,但到目前为止没有成功。目前的错误是Failed to parse MongoDB URI.

如果有人有类似的经历,任何帮助将不胜感激。

4

1 回答 1

1

我有同样的问题,我仍然期待得到一个真正的解决方案。

我直接用以下代码编辑了doctrine-mongo-odm-module(src/DoctrineMongoODMModule/Service/ConnectionFactory.php)中的ConnectionFactory.php

//...
  if (empty($connectionString)) {
        $connectionString = 'mongodb+srv://';  //prev: 'mongodb://'

        $user     = $options->getUser();
        $password = $options->getPassword();
        $dbName   = $options->getDbName();

        if ($user && $password) {
            $connectionString .= $user . ':' . $password . '@';
        }

        $connectionString .= $options->getServer() /*. ':' . $options->getPort()*/;

        if ($dbName) {
            $connectionString .= '/' . $dbName;
        }
    } else {
        // parse dbName from the connectionString
        $dbStart = strpos($connectionString, '/', 11);
        if ($dbStart !== false) {
            $dbEnd  = strpos($connectionString, '?');
            $dbName = substr(
                $connectionString,
                $dbStart + 1,
                $dbEnd ? ($dbEnd - $dbStart - 1) : PHP_INT_MAX
            );
        }
    }
//...

在我的连接文件中:

//...
'odm_default' => array(
            'server'           => '<host>',
            'port'             => '',
            'connectionString' =>  null,
            'user'             => '<user>',
            'password'         => '<psw>',
            'dbname'           => '<db>',
            'options'          => array()
        ),
//...

我认为这是最糟糕的解决方案(编辑供应商的文件),但在我的情况下有效,将其作为临时修复

于 2020-09-14T12:54:54.833 回答