在PHP mongodb中无需身份验证即可切换数据库

时间:2015-11-06 22:01:56

标签: php mongodb

我使用php MongoClient()登录(auth = true)到mongodb" test"使用Php。 现在我想将db切换到" test1"使用php而无需身份验证 使用mongo shell命令可以正常工作 - "使用test1" 当我尝试使用connection-> selectdb(" test1")在php中执行相同操作时,它会尝试在" test1"上对同一用户进行身份验证。 db并失败。

有没有办法使用Php Mongoclient()来切换数据库?

mongoshell上的下面代码将在test上验证user1并在test1.orders上运行mapreduce,方法是将结果存储在test.SampleGroupby中

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
));

1 个答案:

答案 0 :(得分:0)

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

如果MongoDB配置为启用身份验证,则连接字符串

中只需要用户名和密码

例如<强>的mongodb://用户名:密码@主机:端口

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

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

例如

$conn = new MongoClient('mongodb://username:password@host:port'); 
$db = $conn->selectDB("dbname");

如果启用了身份验证,则每个数据库将有一个单独的用户。

因此,为了切换到另一个数据库,我们需要使用带有连接字符串作为参数的 MongoClient 来定义新的连接对象,然后使用返回的连接对象调用 selectDB ()方法

如果未启用身份验证,我们只需要调用selectDB()方法,并将数据库名称作为参数