我使用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
));
答案 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()方法,并将数据库名称作为参数