Php 未定义的属性:MongoDB\Driver\Manager::$db

Php 未定义的属性:MongoDB\Driver\Manager::$db,php,mongodb,wamp,Php,Mongodb,Wamp,我有一个本地MongoDB数据库运行在Windows 10上的WAMP上。我使用的是PHP版本7.2.10、Apache 2.4.35和MongoDB扩展1.5.3。我正在测试一个非常简单的web应用程序,当我试图通过php脚本将数据发送到数据库时,会出现以下错误: PHP Notice: Undefined property: MongoDB\Driver\Manager::$db in C:\wamp64\www\php\test.php 相关文件test.php的相关部分如下所示:

我有一个本地MongoDB数据库运行在Windows 10上的WAMP上。我使用的是PHP版本7.2.10、Apache 2.4.35和MongoDB扩展1.5.3。我正在测试一个非常简单的web应用程序,当我试图通过php脚本将数据发送到数据库时,会出现以下错误:

PHP Notice:  Undefined property: MongoDB\Driver\Manager::$db in 
C:\wamp64\www\php\test.php
相关文件
test.php
的相关部分如下所示:

$objectId = new MongoDB\BSON\ObjectId();
$dbhost = "127.0.0.1:27017";
$dbname = "db";
$m = new MongoDB\Driver\Manager("mongodb://localhost:27017");
var_dump($m);
$db = $m->$dbname;
未定义的属性会导致另一个错误:
致命错误:未捕获错误:调用null上的成员函数selectCollection()
,这会导致脚本失败


是什么导致属性
MongoDB\Driver\Manager::$db
未定义?

工作php代码如下所示。请注意存在到'vendor/autoload.php'的链接:

  $DB_CONNECTION_STRING="mongodb://YourCredentials";
  require '../../vendor/autoload.php';
  $manager = new MongoDB\Driver\Manager( $DB_CONNECTION_STRING );
然后,如果您使用MongoDB\Driver\Manager(一种现代版本的MongoDB驱动程序),您的CRUD操作将如下所示:

在集合中创建文档:

按名称读取集合中的文档,但有限制:

$filter = ['name' => 'John'];
$options = ['limit' => 2];
$query = new MongoDB\Driver\Query($filter, $options);
$manager->executeQuery('db.MyCollection', $query);
$filter = ['_id' => new MongoDB\BSON\ObjectID( '5bdf54e6d722dc000f0aa6c2' )];
$options = ['limit' => 2];
$query = new MongoDB\Driver\Query($filter, $options);
$manager->executeQuery('db.MyCollection', $query);    
通过MongoDb\u id读取集合中的文档,但有限制:

$filter = ['name' => 'John'];
$options = ['limit' => 2];
$query = new MongoDB\Driver\Query($filter, $options);
$manager->executeQuery('db.MyCollection', $query);
$filter = ['_id' => new MongoDB\BSON\ObjectID( '5bdf54e6d722dc000f0aa6c2' )];
$options = ['limit' => 2];
$query = new MongoDB\Driver\Query($filter, $options);
$manager->executeQuery('db.MyCollection', $query);    
更新集合中的文档:(阅读有关选项upsert和multi的更多信息)

删除集合中的文档-删除:


工作的php代码如下所示。请注意存在到'vendor/autoload.php'的链接:

  $DB_CONNECTION_STRING="mongodb://YourCredentials";
  require '../../vendor/autoload.php';
  $manager = new MongoDB\Driver\Manager( $DB_CONNECTION_STRING );
然后,如果您使用MongoDB\Driver\Manager(一种现代版本的MongoDB驱动程序),您的CRUD操作将如下所示:

在集合中创建文档:

按名称读取集合中的文档,但有限制:

$filter = ['name' => 'John'];
$options = ['limit' => 2];
$query = new MongoDB\Driver\Query($filter, $options);
$manager->executeQuery('db.MyCollection', $query);
$filter = ['_id' => new MongoDB\BSON\ObjectID( '5bdf54e6d722dc000f0aa6c2' )];
$options = ['limit' => 2];
$query = new MongoDB\Driver\Query($filter, $options);
$manager->executeQuery('db.MyCollection', $query);    
通过MongoDb\u id读取集合中的文档,但有限制:

$filter = ['name' => 'John'];
$options = ['limit' => 2];
$query = new MongoDB\Driver\Query($filter, $options);
$manager->executeQuery('db.MyCollection', $query);
$filter = ['_id' => new MongoDB\BSON\ObjectID( '5bdf54e6d722dc000f0aa6c2' )];
$options = ['limit' => 2];
$query = new MongoDB\Driver\Query($filter, $options);
$manager->executeQuery('db.MyCollection', $query);    
更新集合中的文档:(阅读有关选项upsert和multi的更多信息)

删除集合中的文档-删除:


使用
MongoDB\Client
而不是
MongoDB\Driver\Manager
@Kazz-yep,这也是我的想法。抛出
致命错误:未捕获错误:未找到类'MongoDB\Client'
您的代码
$m->$dbname
以及
->selectCollection(…)
对应于旧版mongo,但
MongoDB\Driver\Manager
是新版MongoDB的一部分,因此您的代码中有两个不同的lib不匹配,请参阅:(旧版)非常感谢@Kazz,这就是我所缺少的。使用
MongoDB\Client
而不是
MongoDB\Driver\Manager
@Kazz是的,我也这么想。抛出
致命错误:未捕获错误:未找到类'MongoDB\Client'
您的代码
$m->$dbname
以及
->selectCollection(…)
对应于旧版mongo,但
MongoDB\Driver\Manager
是新版MongoDB的一部分,因此您的代码中有两个不同的lib不匹配,请参阅:(旧版)@Kazz非常感谢,这就是我所缺少的。你如何使用$manager列出收藏媒体的内容?在MongoShell中,这可以工作
db.media.find()
谢谢。而
newmongodb\Driver\Manager($DB\u CONNECTION\u STRING)似乎解析为一个对象,但是
新建MongoDB\Client($DB\u CONNECTION\u STRING)不知道如何使用$manager列出收藏媒体的内容?在MongoShell中,这可以工作
db.media.find()
谢谢。而
newmongodb\Driver\Manager($DB\u CONNECTION\u STRING)似乎解析为一个对象,但是
新建MongoDB\Client($DB\u CONNECTION\u STRING)不存在