nbsbbs/mongo-php-adapter

适配器,在 mongo-php-library 上提供 ext-mongo 接口(由 Noobus 更新)

1.2.4 2023-04-23 12:40 UTC

This package is auto-updated.

Last update: 2024-08-23 15:25:20 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 MongoDB ODM)但想迁移到不运行 ext-mongo 的 PHP 7 的应用程序提供一个兼容层。

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

安装

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

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

$ composer config "platform.ext-mongo" "1.6.16" && composer require alcaeus/mongo-php-adapter

上述命令首先标记 mongo 扩展为已安装,然后需要此适配器。这是为了解决 composer 的一个错误,请参阅 composer/composer#5030

已知问题

返回值和异常

某些方法可能不会抛出与 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 字段相同的值。《code>server 字段缺少身份验证信息。
  • 方法 setFlag 尚未实现。
  • 方法 timeout 不会更改任何查询选项。客户端超时不再由新驱动程序支持。使用 maxTimeMS 设置作为替代。

MongoCommandCursor

  • 方法 createFromDocument 尚未实现。
  • 方法 info 不能可靠地填充游标信息中的所有字段。这包括 atnumReturnedfirstBatchAtfirstBatchNumReturned 字段。为了与 MongoCursor 兼容,《code>at 和 numReturned 字段总是返回 0。《code>firstBatchAt 和 firstBatchNumReturned 字段将包含相同的值,这是迭代器的内部位置。

开发

如果您正在为此驱动程序制作补丁,您可以从存储库目录的根目录按照以下步骤运行单元测试

$ composer install
$ vendor/phpunit/phpunit/phpunit --verbose

它假定 localhost 上正在运行 mongod 服务器。以下是启动 mongod 以进行这些测试的示例命令

$ mongod --smallfiles --fork --logpath /var/log/mongod.log --setParameter enableTestCommands=1

测试还假定 PHP 5.6+ 和 ext-mongodb 扩展可用。