liquidbox / silex-mongodb
Silex 微框架的 MongoDB 服务提供者
dev-master
2018-01-04 09:53 UTC
Requires
- mongodb/mongodb: ^1.0
- silex/silex: ^2.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.0
- phpunit/phpunit: ^4.0|^5.0
This package is not auto-updated.
Last update: 2024-09-20 02:14:35 UTC
README
您正在阅读 Silex 2.x 的文档。切换到 Silex 1.x 的文档。
MongoDB
MongoDbServiceProvider 提供与 MongoDB 扩展的集成。
参数
- mongodb.uri(可选):一个 MongoDB 连接 URI。
- mongodb.connection(可选):指定连接字符串的参数集合。
- host(可选):连接的服务器地址。可以是主机名、IP 地址或 UNIX 域套接字。
- port(可选):默认值为 27017。
- username(可选):连接字符串的用户名。
- password(可选):连接字符串的密码。
- database(可选):数据库名。
- options(可选):连接特定选项的集合。有关这些选项的完整描述,请参阅 连接字符串选项。
- mongodb.uri_options(可选):附加的连接字符串选项,将覆盖
uri或connection参数中具有相同名称的任何选项。 - mongodb.driver_options(可选):MongoDB 驱动程序选项的数组。
uri 参数覆盖 connection。
服务
- mongodb:
MongoDB\Client连接实例。与 MongoDB 交互的主要方式。 - mongodb.clients:MongoDB 客户端实例的集合。有关使用多个客户端的详细信息,请参阅使用多个客户端部分。
- mongodb.client:
MongoDB\Client连接实例的工厂。
注册
示例 1:连接到名为 test 的副本集
$app->register(new \LiquidBox\Silex\Provider\MongoDbServiceProvider(), array( 'mongodb.uri' => "mongodb://db1.example.net:27017,db2.example.net:2500/?replicaSet=test", )); // or $app->register(new \LiquidBox\Silex\Provider\MongoDbServiceProvider(), array( 'mongodb.connection' => "db1.example.net:27017,db2.example.net:2500/?replicaSet=test", )); // or $app->register(new \LiquidBox\Silex\Provider\MongoDbServiceProvider(), array( 'mongodb.connection' => array( 'hosts' => array( "db1.example.net:27017", array( 'host' => "db2.example.net", 'port' => 2500 ), ), 'options' => array( 'replicaSet' => "test", ) ), ));
上面注册的所有连接都是等效的。
示例 2:连接到分片集群
$app->register(new \LiquidBox\Silex\Provider\MongoDbServiceProvider(), array( 'mongodb.connection' => "r1.example.net:27017,r2.example.net:27017", )); // or $app->register(new \LiquidBox\Silex\Provider\MongoDbServiceProvider(), array( 'mongodb.connection' => array( 'hosts' => array( array('host' => "r1.example.net", 'port' => 27017), array('host' => "r2.example.net", 'port' => 27017), ), ), ));
示例 3:通过文件路径 /tmp/mongodb-27017.sock 连接到 UNIX 域套接字
$app->register(new \LiquidBox\Silex\Provider\MongoDbServiceProvider(), array( 'mongodb.connection' => rawurlencode("/tmp/mongodb-27017.sock"), ));
将 MongoDB 添加为依赖项
composer require liquidbox/silex-mongodb:^2.0
用法
示例 1:向 demo 数据库的 beers 集合中插入文档
$collection = $app['mongodb']->demo->beers; $result = $collection->insertOne(array( 'name' => "Hinterland", 'brewery' => "BrewDog", )); echo "Inserted with Object ID '{$result->getInsertedId()}'";
示例 2:使用 find 方法
$collection = $app['mongodb']->demo->beers; $results = $collection->find(array( 'name' => "Hinterland", 'brewery' => "BrewDog", )); foreach ($results as $entry) { printf('%d: %s' . PHP_EOL, $entry['_id'], $entry['name']); }
使用多个客户端
MongoDB 提供者允许使用多个客户端。为了配置 URI,使用 mongodb.uri 作为配置数组的键是连接名称,值是参数
$config['mongodb']['replica_name'] = "test"; $config['mongodb']['replica_cluster'] = array( "example1.com", "example2.com", "example3.com", ); // ... $app->register(new LiquidBox\Silex\Provider\MongoDbServiceProvider(), array( 'mongodb.uri' => array( 'mongo_read' => array( 'connection' => array( 'hosts' => $config['mongodb']['replica_cluster'], 'options' => array( 'replicaSet' => $config['mongodb']['replica_name'], 'readPreference' => "secondary", ) ), ), 'mongo_write' => array( 'connection' => array( 'hosts' => $config['mongodb']['replica_cluster'], 'options' => array( 'replicaSet' => $config['mongodb']['replica_name'], 'w' => 2 'wtimeoutMS' => 2000, ) ), ), ), ));
第一个注册的连接是默认连接,可以像只有一个连接一样简单访问。给定上述配置,这两行是等效的
$app['mongodb']->zips->find(array('city' => "JERSEY CITY", 'state' => "NJ")); $app['mongodb.clients']['mongo_read']->zips->find(array('city' => "JERSEY CITY", 'state' => "NJ"));
有关更多信息,请参阅官方 MongoDB 文档。