pvodicka / mongo-php-adapter
该适配器提供在 mongo-php-library 之上的 ext-mongo 接口。修改后使用我的 mongo-php-library 分支。
Requires
- php: ^5.6 || ^7.0
- ext-hash: *
- ext-mongodb: ^1.2.0
- pvodicka/mongo-php-library: ~1.2.2
Requires (Dev)
- phpunit/phpunit: ^5.7 || ^6.0
Provides
- ext-mongo: 1.6.14
README
修改为使用我的 mongo-php-library 而不是mongodb 原生。不建议在生产环境中使用!
Mongo PHP 适配器
Mongo PHP 适配器是一个用户库,旨在充当依赖于 ext-mongo 的应用程序和新的驱动程序(ext-mongodb
)之间的适配器。
它提供基于 mongo-php-library 构建的 ext-mongo API,因此与 PHP 7 兼容。
目标
这个库旨在为依赖于使用 ext-mongo 的库(例如 Doctrine MongoDB ODM)但想迁移到 PHP 7 或 HHVM(在之上 ext-mongo
无法运行)的应用程序提供兼容层。
如果您不依赖于使用 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_WARNING
和 E_USER_ERROR
触发,因为 trigger_error
不接受 E_WARNING
和 E_USER
代码。如果您依赖错误处理程序中的这些错误代码,请相应地更新您的代码。
对象的序列化
任何 Mongo* 对象(例如 MongoGridFSFile、MongoCursor 等)的序列化将无法正常工作。这些对象可以被序列化,但在反序列化后无法使用。
Mongo
- Mongo 类已过时,并且在此库中没有实现。如果您仍在使用它,请更新您的代码以使用新类。
MongoLog
- MongoLog 类不会记录任何内容,因为底层驱动程序不提供获取此数据的方法。
MongoClient
- connect 和 close 方法没有实现,因为底层驱动程序是懒惰连接的,并且不提供连接和断开连接的方法。
- getConnections 方法没有实现,因为底层驱动程序不提供获取此数据的方法。
- killCursor 方法尚未实现。
MongoDB
- 不支持 authenticate 方法。要连接到需要认证的数据库,请使用连接字符串提供凭据。
- 由于底层驱动程序的问题,无法使用
$cmd
集合。要运行命令,请使用 command 方法,而不是查询虚拟的$cmd
集合。
MongoCollection
- insert、batchInsert 和 save 方法以引用方式接收第一个参数。虽然原始API没有明确指定引用参数,但它确实在给定的对象和文档中添加了一个ID字段。
- 尚未实现 parallelCollectionScan 方法。
MongoCursor
- info 方法无法可靠地填充游标信息中的所有字段。这包括在游标开始迭代后,
numReturned
和server
键。该numReturned
字段将始终显示与at
字段相同的值。该server
字段缺少认证信息。 - setFlag 方法尚未实现。
- timeout 方法不会更改任何查询选项。客户端超时不再由新驱动程序支持。使用 maxTimeMS 设置作为替代。
MongoCommandCursor
- createFromDocument 方法尚未实现。
- info 方法无法可靠地填充游标信息中的所有字段。这包括
at
、numReturned
、firstBatchAt
和firstBatchNumReturned
字段。为与 MongoCursor 兼容,at
和numReturned
字段总是返回 0。该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
扩展可用。