1

我遵循了 mongoDB 的结构:

  • 数据库名称:bios
  • 用户:“费斯”
  • 密码:“嘘”
  • IP:1.2.3.4
  • 集合名称:bios2

来自 MongoVUE:

在此处输入图像描述

这是我的 PHP 代码片段:

$db = new Mongo('mongodb://fess:boo@1.2.3.4/bios');

// if i remove "bios" it asks default db name

$collection_bios2 = $db->bios2;

$cursor_bios2 = $collection_bios2->find(); // <- here I get error
//  PHP Fatal error:  Call to undefined method MongoDB::find()

...
$db->close();

为什么我会收到此错误?
我看到了其他例子,似乎$collection_bios2应该是集合。

谢谢

4

3 回答 3

3

你选择分贝吗?如

$mongo = new Mongo();
// the following two lines are equivalent
$db = $mongo->selectDB("foo");
$db = $mongo->foo;
于 2013-05-27T11:16:51.683 回答
1

发现了问题。为了仅创建连接,首先我需要为管理员创建用户/pswd:

通过 mongoDB CLI:

 > use admin
 > use bios
 > db.createUser("fess", "boo");

实际上我只有biosDB的用户

否则它会让我出错:

连接到 MongoDB 服务器时出错无法连接到:1.2.3.4:27017:使用用户名“fess”对数据库“admin”进行身份验证失败:身份验证失败

PHP

        // here we create just client (for admin aka root)
        $m = new MongoClient('mongodb://fess:boo@1.2.3.4');

        // and switch to "bios" 
        $db = $m->selectDB("bios");

        $list = $db->listCollections();
        foreach ($list as $collection) {
             Log::Debug(get_class() . " -> testMongoDB", "feederliteRC/U", array("Output" => "collection: $collection"));

        }

         //$db = new Mongo('mongodb://max:bagabu@172.20.0.23/bios');

         //$collection_bios = $db->bios;
         $collection_bios2 = $db->bios2;

输出

 "collection: bios.bios2"
于 2013-05-27T11:17:32.373 回答
0

对我来说,这很好,如下所示。我将“mongodb/mongodb”与 packagist 的作曲家一起使用。“作曲家需要 mongodb/mongodb”。

require(__DIR__."/vendor/autoload.php");
use MongoDB\Client as MGDClient;

$collection = (new MGDClient(username:password@127.0.0.1:27017/db_name))->db_name->collection_name;

$cursor = $collection->find([],['limit'=>5]);

var_dump($cursor);
于 2017-08-16T08:05:44.163 回答