2015-11-06 19 views
0

我正在使用php MongoClient()来登录(auth = true),以使用Php的mongodb“test”。 现在我想切换分贝到“test1”使用PHP没有身份验证。 它适用于mongo shell命令 - “use test1” 当我尝试使用connection-> selectdb(“test1”)在php中执行相同的操作时,它会尝试在“test1”db上验证同一用户并失败。在PHP中没有身份验证的开关db mongodb

有没有办法使用Php Mongoclient()切换db?

上mongoshell下面的代码将在测试和运行的MapReduce上test1.orders通过存储test.SampleGroupby结果验证USER1

mongo --host XXXX -u user1 -p XXXX --authenticationDatabase test 
use test1; /*I don't need to authenticate user1 on test1 (test.user1 already has read/write permission on test1) */ 
db.orders.mapReduce(mapf, redf, {"out": {reduce: "SampleGroupby", db: "test"}, finalize: finf }) 

现在同样我想用PHP来实现 -

$Connection = MongoClient("mongodb://XXXX:XXXX", array("username" => user1, "password" => XXXX, "db" => test)); 
$Connection->test1->command(array( /*Here it tries to re authenticate user1 on test1 and fails */ 
"mapreduce" => orders, 
"map" => $map, 
"reduce" => $reduce, 
"out" => array("reduce" => SampleGroupby , "db" => test), 
"finalize" => $finalize 
)); 

回答

0

MongoClient是PHP类用于连接到MongoDB主机与连接字符串作为参数。 连接字符串封装用户名,密码和Mongodb主机。

如果MongoDB的被配置为能够验证那么只有用户名和密码被要求在连接字符串

EG。 的mongodb://用户名:密码@主机:端口

MongoClient将返回数据库连接对象。

使用数据库连接对象我们切换到特定的数据库使用selectDB()方法。

例如,

$conn = new MongoClient('mongodb://username:[email protected]:port'); 
$db = $conn->selectDB("dbname"); 

如果启用身份验证,然后会有每个数据库单独的用户。

因此,对于切换到另一个数据库那么我们就需要使用MongoClient与连接字符串作为参数,使用返回的连接对象

没有认证来定义一个新的连接对象,然后调用selectDB()方法使我们只是需要调用与数据库名称作为参数的selectDB()方法

+0

感谢您的回应。我明白了这一点,但问题在于,我无法获得使用mongo shell的相同结果。以确切的方案更新问题。 –