liquidbox/silex-mongodb

Silex 微框架的 MongoDB 服务提供者

dev-master 2018-01-04 09:53 UTC

This package is not auto-updated.

Last update: 2024-09-20 02:14:35 UTC


README

GitHub release license Build Status Code Coverage Scrutinizer Code Quality Packagist

您正在阅读 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(可选):附加的连接字符串选项,将覆盖 uriconnection 参数中具有相同名称的任何选项。
  • mongodb.driver_options(可选):MongoDB 驱动程序选项的数组。

uri 参数覆盖 connection

服务

  • mongodbMongoDB\Client 连接实例。与 MongoDB 交互的主要方式。
  • mongodb.clients:MongoDB 客户端实例的集合。有关使用多个客户端的详细信息,请参阅使用多个客户端部分。
  • mongodb.clientMongoDB\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 文档