MongoClient类与MongoDB \ Driver \ Manager类

时间:2017-08-16 05:36:56

标签: php mongodb

我想得到你对我的网络项目的推荐。我使用PHP和MongoDB,但当我从php文档中读到这句话时,我很困惑。

不推荐使用此扩展来定义此类。相反,应该使用MongoDB扩展。此类的替代方案包括: 的MongoDB \驱动\管理器

我已经使用了MongoClient Class for CRUD但是在读完那句话之后,我尝试将MongoClient迁移到MongoDB \ Driver \ Manager。使用MongoDB \ Driver \ Manager的连接已经成功,但我不能再这样了:(

我的PHP版本是5.6.29。 Mongo扩展版本是1.7.0 MongoDB扩展版本为1.2.9

我的问题是: 我是否必须使用MongoDB \ Driver \ Manager Class? 它比MongoClient Class更好吗?

2 个答案:

答案 0 :(得分:2)

以下是关于弃用语言功能的好答案: What does PHP do with deprecated functions?

这是适用于php的mongodb:

$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");
$filter = [];
$options = [
    'sort' => ['_id' => 1],
];

$query = new MongoDB\Driver\Query($filter, $options);
$cursor = $manager->executeQuery('db.collection', $query);

foreach ($cursor as $document) {
//...
}

有很多关于使用php和mongodb进行CRUD操作的教程,例如:MongoDB PHP tutorial

简而言之:由于安全原因,您不应该使用已弃用的功能,因为将来可能会从php中删除它。所以最好更新你的代码。

答案 1 :(得分:0)

我亲自遇到了一个'vendor / autoload.php'链接。我的代码如下所示后,它开始工作:

  $DB_CONNECTION_STRING="mongodb://YourCredentials";
  require '../vendor/autoload.php';
  $manager = new MongoDB\Driver\Manager( $DB_CONNECTION_STRING );

然后,如果您使用MongoDB驱动程序的现代版本MongoDB \ Driver \ Manager,则会实现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);

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