giuffre / mongo-php-adapter
为 mongo-php-library 提供ext-mongo接口的适配器
Requires
- php: >=5.4
- ext-hash: *
- ext-mongodb: ^1.2.0
- mongodb/mongodb: ^1.0.1
Requires (Dev)
- facile-it/paraunit: ^0.8.2
- phpunit/phpunit: ^4.8 || ^5.4
Provides
- ext-mongo: 1.6.14
README
Mongo PHP Adapter 是一个用户空间库,旨在作为依赖 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_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
- 未实现 explain 方法。
- info 方法无法可靠地填充游标信息中的所有字段。这包括在游标开始迭代后的
numReturned
和server
键。numReturned
字段将始终显示与at
字段相同的值。server
字段缺少认证信息。 - 未实现 setFlag 方法。
- timeout 方法不会更改任何查询选项。新驱动程序不再支持客户端超时。使用 maxTimeMS 设置作为替代。
MongoCommandCursor
- 未实现 createFromDocument 方法。
- info 方法无法可靠地填充游标信息中的所有字段。这包括
at
、numReturned
、firstBatchAt
和firstBatchNumReturned
字段。at
和numReturned
字段始终返回 0 以与 MongoCursor 兼容。firstBatchAt
和firstBatchNumReturned
字段将包含相同的值,这是迭代器的内部位置。