towerjt / mongo-php-adapter
为mongo-php-library提供ext-mongo接口的适配器
Requires
- php: ^5.6 || ^7.0
- ext-hash: *
- ext-mongodb: ^1.1.0
- mongodb/mongodb: ^1.0.1
Requires (Dev)
- phpunit/phpunit: ^5.7 || ^6.0
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)但希望迁移到PHP 7或HHVM(在这些环境中ext-mongo
无法运行)的应用程序提供兼容层。
如果你不依赖于使用ext-mongo
的库,则不应使用此库。如果你正在开始一个新的项目,请查看mongodb/mongodb。
安装
此库要求您已安装mongodb
扩展,并且与旧的mongo
扩展冲突。
安装此库的首选方法是使用Composer,从您的项目根目录运行以下命令
$ composer require alcaeus/mongo-php-adapter
如果您的项目已经依赖于ext-mongo
,则上述命令可能无法正常工作。这是由于Composer中的一个错误,请参阅composer/composer#5030。
要修复此问题,您可以在运行上述命令或在没有composer.lock
文件的情况下运行composer update
时使用--ignore-platform-reqs
开关。
已知问题
返回值和异常
某些方法可能不会抛出与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
。字段at
和numReturned
将始终返回 0 以与 MongoCursor 兼容。字段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
扩展可用。