我现在应该使用哪个 PHP mongodb driver?

Which PHP mongodb driver should I now be using?

我一直生活在岩石下什么的,因为我一定是唯一一个还在使用 outdata driver 将 PHP 连接到 mongodb[=21 的人=]

http://php.net/manual/en/mongo.installation.php 我知道当我访问 url

时会收到此消息

This extension is deprecated. Instead, the MongoDB extension should be used.

现在我知道我仍然可以使用它,而且大部分功能都可以使用,但要确保我们使用官方 drivers 和最新的 drivers。

我需要一些建议,我不理解或者我不理解的东西,无论哪种方式,新的 driver 都意味着我将不得不安装一个 3rd 方插件,更好地称为 库和框架.

但是我不想使用那里列出的那些,因为我似乎找不到 smarty-tpl 框架,而我的其他客户都使用

static::$_db = new MongoClient

不知道这样的东西还能不能用?

明确的问题 - 如果上面是地方

  1. 他们的插件是 smarty-tpl 连接到新的 mongodb driver 吗?
  2. 他们是Mongodb官方推荐的框架或库吗?
  3. 他们是新 driver 的 new MongoClient 连接字符串吗,如果是,请指出,因为我在 mongodb 文档中找不到它,它一直带我到旧 mongo driver.

进一步探讨这个问题:

假设我们使用上面列表中的选项 3 现在是正确的函数

new MongoDB\Driver\Manager

注意我一直使用 new MongoClient 并调用我使用的数据库

$siteDB = SITEDB;
     return static::$_db->$siteDB;

所以这很简单,但我猜测 Manager 不是数据库,或者它只是一个很长的说法,这是客户端。

我不想做太多改动,因为我的 class 中有一个函数可以处理数据库连接

public static function db()
    {
     if (!static::$_db) {
        static::$_db = new MongoClient("mongodb://".SITEDBUSERNAME.":".SITEDBPASS."@".SITEDBURL.":27017/".SITEDB);
     }
      $siteDB = SITEDB;
     return static::$_db->$siteDB;
    }

旧扩展和新扩展的两个主要区别是:

  • 扩展被分成两部分,低级驱动程序用 C 编写,用户友好的界面构建在 PHP 之上;这样可以更轻松地维护和定制
  • PHP 库已根据现代实践进行了一些重新排列,例如命名空间

除非你在做一些不寻常的事情或者真的讨厌默认库,否则你不需要关心扩展和库之间的分离:只需安装两者,然后像以前一样继续使用用户友好的功能。

manual page on using the PHP library 包括这个例子:

<?php
require 'vendor/autoload.php'; // include Composer goodies

$client = new MongoDB\Client("mongodb://localhost:27017");
$collection = $client->demo->beers;

$result = $collection->insertOne( [ 'name' => 'Hinterland', 'brewery' => 'BrewDog' ] );

echo "Inserted with Object ID '{$result->getInsertedId()}'";

所以唯一的变化就是查找 MongoClient 并替换为 MongoDB\Client

我不清楚你所说的 Smarty 集成是什么意思(我通常不希望数据存储和模板引擎直接交互),但如果那是第三方插件,你可能需要寻找或编写一个更新版本,将 \ 放在正确的位置等