使用mongodb php驱动程序和新的php库

时间:2016-03-15 20:41:53

标签: mongodb

使用新的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驱动程序。

mongo connection code

但是,当我尝试运行以下find()时,我在vendor / mongodb / mongodb / src / Operation / Find.php第179行中获得auth失败异常

mongo find()

使用传统的mongo驱动程序没有问题。关于身份验证的任何想法都失败了?什么是mongodb驱动程序完全失败?正在mongodb://字符串中传递数据库和集合的正确凭据。传统中的工作因新驱动程序和库而失败。

环境:

  • Windows 10
  • WAMP
  • PHP 5.5.12
  • Mongodb driver 1.1.4
  • 最新版本的新php库(与作曲家一起安装:作曲家需要“mongodb / mongodb = ^ 1.0.0”)
  • Mongo实例版本2.4.6

2 个答案:

答案 0 :(得分:2)

所以这就是解决方案。经过3天将我的头撞在墙上后,新的mongodb驱动程序解析了mongodb uri与传统的mongo驱动程序不同。我的密码中有%符号。一旦我将%符号更改为其他内容,一切都按预期工作。

答案 1 :(得分:1)

我遇到了同样的错误,发现我必须将数据库名称放在连接字符串中。 文档here说:

  

如果未指定/ database且连接字符串包含凭据,则驱动程序将对admin数据库进行身份验证。

我使用的用户对admin-database没有任何权限,所以这就是我收到身份验证错误的原因。 我建议你也检查一下。您无法通过连接选项以与MongoClient相同的方式提供数据库名称。