lyallsv/mongo-php-adapter

适配器,在mongo-php-library之上提供ext-mongo接口,用于在5.4上安装以实现迁移

1.1.4 2017-08-30 12:45 UTC

README

Build Status Code Coverage Scrutinizer Code Quality

Mongo PHP 适配器是一个用户库,旨在作为依赖于ext-mongo的应用程序和新的驱动程序(ext-mongodb)之间的适配器。

它提供了基于mongo-php-library构建的ext-mongo API,因此与PHP 7兼容。

目标

这个库旨在为依赖于使用ext-mongo的库(例如Doctrine ODM)但想要迁移到不支持ext-mongo的PHP 7或HHVM的应用程序提供兼容层。

如果你不依赖于使用ext-mongo的库,则不应使用此库。如果你正在启动一个新项目,请查看mongodb/mongodb

安装

此库要求您安装mongodb扩展,并且它与旧版的mongo扩展冲突。

安装此库的首选方法是通过从项目根目录运行以下命令使用Composer:

$ composer require alcaeus/mongo-php-adapter

如果您的项目已经依赖ext-mongo,则上面的命令可能不会工作。这是由于Composer中的错误,请参阅composer/composer#5030

要修复此问题,您可以在运行上述命令时使用--ignore-platform-reqs开关,或者在存在无composer.lock文件的情况下运行composer update

已知问题

返回值和异常

某些方法可能不会抛出与ext-mongo中的对应方法相同的异常消息。不要依赖异常消息相同。

返回包含connectionId字段的结果数组的所有方法始终返回0作为连接ID。

错误

所有由ext-mongo引发的错误和警告都作为E_USER_WARNINGE_USER_ERROR触发,因为trigger_error不接受E_WARNINGE_USER代码。如果您在错误处理程序中依赖于这些错误代码,请相应地更新您的代码。

对象的序列化

任何Mongo*对象(例如MongoGridFSFile、MongoCursor等)的序列化将无法正常工作。这些对象可以被序列化,但在反序列化后无法使用。

Mongo

  • Mongo类已弃用,且在此库中没有实现。如果您仍在使用它,请更新您的代码以使用新类。

MongoLog

  • MongoLog类不会记录任何内容,因为底层驱动程序不提供检索这些数据的方法。

MongoClient

  • connectclose方法尚未实现,因为底层驱动程序是懒惰连接的,并且不提供连接和断开连接的方法。
  • getConnections方法尚未实现,因为底层驱动程序不提供检索此数据的方法。
  • killCursor方法尚未实现。

MongoDB

  • authenticate 方法不支持。要使用身份验证连接到数据库,请在连接字符串中提供凭证。
  • 由于底层驱动程序的问题,无法使用 $cmd 集合。要运行命令,请使用 command 方法代替查询虚拟的 $cmd 集合。

MongoCollection

  • insertbatchInsertsave 方法通过引用接收第一个参数。虽然原始 API 没有明确指定按引用传递的参数,但它确实为给定的对象和文档添加了一个 ID 字段。
  • parallelCollectionScan 方法尚未实现。

MongoCursor

  • info 方法无法可靠地填充游标信息的所有字段。这包括在游标开始迭代后的 numReturnedserver 键。 numReturned 字段将始终显示与 at 字段相同的值。 server 字段缺少身份验证信息。
  • setFlag 方法尚未实现。
  • timeout 方法不会更改任何查询选项。客户端超时不再由新驱动程序支持。请使用 maxTimeMS 设置作为替代。

MongoCommandCursor

  • createFromDocument 方法尚未实现。
  • info 方法无法可靠地填充游标信息的所有字段。这包括 atnumReturnedfirstBatchAtfirstBatchNumReturned 字段。为了与 MongoCursor 兼容,atnumReturned 字段始终返回 0。 firstBatchAtfirstBatchNumReturned 字段将包含相同的值,这是迭代器的内部位置。