使用新的mongodb驱动程序:https://github.com/mongodb/mongo-php-driver和新的php库:https://github.com/mongodb/mongo-php-library我正在尝试执行简单的find()查询“auth failed”。
在以下代码中,连接字符串遵循模式mongodb:// user:password @ mongoinstance:port / database。连接字符串使用旧的传统mongo驱动程序与find()一起使用,但不使用新的mongodb驱动程序。新的mongodb正确安装在php中并显示在phpinfo中,我们需要做的唯一重大改变是使用“new MongoDB \ Client”而不是新的MongoClient用于传统的mongo驱动程序。
但是,当我尝试运行以下find()时,我在vendor / mongodb / mongodb / src / Operation / Find.php第179行中获得auth失败异常
使用传统的mongo驱动程序没有问题。关于身份验证的任何想法都失败了?什么是mongodb驱动程序完全失败?正在mongodb://字符串中传递数据库和集合的正确凭据。传统中的工作因新驱动程序和库而失败。
环境:
答案 0 :(得分:2)
所以这就是解决方案。经过3天将我的头撞在墙上后,新的mongodb驱动程序解析了mongodb uri与传统的mongo驱动程序不同。我的密码中有%符号。一旦我将%符号更改为其他内容,一切都按预期工作。
答案 1 :(得分:1)
我遇到了同样的错误,发现我必须将数据库名称放在连接字符串中。 文档here说:
如果未指定/ database且连接字符串包含凭据,则驱动程序将对admin数据库进行身份验证。
我使用的用户对admin-database没有任何权限,所以这就是我收到身份验证错误的原因。 我建议你也检查一下。您无法通过连接选项以与MongoClient相同的方式提供数据库名称。