未定义 属性:MongoDB\Driver\Manager::$db
Undefined property: MongoDB\Driver\Manager::$db
我在 Windows 10 上的 WAMP 上有一个本地 MongoDB 数据库 运行。我正在使用 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;
未定义 属性 会导致另一个错误:Fatal error: Uncaught Error: Call to a member function selectCollection() on null
,这会导致脚本失败。
是什么导致 属性 MongoDB\Driver\Manager::$db
未定义?
工作 php 代码如下所示。请注意存在 link 到 '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 操作将如下所示:
在集合中创建一个文档:
$bulkWrite = new MongoDB\Driver\BulkWrite;
$doc = ['name' => 'John', age => 33, profession => 'Guess what?'];
$bulkWrite->insert($doc);
$manager->executeBulkWrite('db.MyCollection', $bulkWrite);
按名称读取 集合中的文档,限制为:
$filter = ['name' => 'John'];
$options = ['limit' => 2];
$query = new MongoDB\Driver\Query($filter, $options);
$manager->executeQuery('db.MyCollection', $query);
读取 集合中的文档 by MongoDb _id 限制:
$filter = ['_id' => new MongoDB\BSON\ObjectID( '5bdf54e6d722dc000f0aa6c2' )];
$options = ['limit' => 2];
$query = new MongoDB\Driver\Query($filter, $options);
$manager->executeQuery('db.MyCollection', $query);
更新 集合中的文档:(阅读更多关于选项 upsert 和 multi here)
$bulkWrite = new MongoDB\Driver\BulkWrite;
$filter = ['name' => 'John'];
$update = ['$set' => ['name' => 'Smith', age: 35, profession => 'Guess what?']];
$options = ['multi' => false, 'upsert' => false];
$bulkWrite->update($filter, $update, $options);
$manager->executeBulkWrite('db.MyCollection', $bulkWrite);
删除 集合中的文档 - 删除:
$bulkWrite = new MongoDB\Driver\BulkWrite;
$filter = ['name' => 'John', age => 35];
$options = ['limit' => 1];
$bulkWrite->delete($filter, $options);
$manager->executeBulkWrite('db.MyCollection', $bulkWrite);
我在 Windows 10 上的 WAMP 上有一个本地 MongoDB 数据库 运行。我正在使用 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;
未定义 属性 会导致另一个错误:Fatal error: Uncaught Error: Call to a member function selectCollection() on null
,这会导致脚本失败。
是什么导致 属性 MongoDB\Driver\Manager::$db
未定义?
工作 php 代码如下所示。请注意存在 link 到 '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 操作将如下所示:
在集合中创建一个文档:
$bulkWrite = new MongoDB\Driver\BulkWrite;
$doc = ['name' => 'John', age => 33, profession => 'Guess what?'];
$bulkWrite->insert($doc);
$manager->executeBulkWrite('db.MyCollection', $bulkWrite);
按名称读取 集合中的文档,限制为:
$filter = ['name' => 'John'];
$options = ['limit' => 2];
$query = new MongoDB\Driver\Query($filter, $options);
$manager->executeQuery('db.MyCollection', $query);
读取 集合中的文档 by MongoDb _id 限制:
$filter = ['_id' => new MongoDB\BSON\ObjectID( '5bdf54e6d722dc000f0aa6c2' )];
$options = ['limit' => 2];
$query = new MongoDB\Driver\Query($filter, $options);
$manager->executeQuery('db.MyCollection', $query);
更新 集合中的文档:(阅读更多关于选项 upsert 和 multi here)
$bulkWrite = new MongoDB\Driver\BulkWrite;
$filter = ['name' => 'John'];
$update = ['$set' => ['name' => 'Smith', age: 35, profession => 'Guess what?']];
$options = ['multi' => false, 'upsert' => false];
$bulkWrite->update($filter, $update, $options);
$manager->executeBulkWrite('db.MyCollection', $bulkWrite);
删除 集合中的文档 - 删除:
$bulkWrite = new MongoDB\Driver\BulkWrite;
$filter = ['name' => 'John', age => 35];
$options = ['limit' => 1];
$bulkWrite->delete($filter, $options);
$manager->executeBulkWrite('db.MyCollection', $bulkWrite);