PHP version >= 7.0
<?php
/**
* Class DBMongo
* @desc mongo操作类
* @author wangxuemin
*/
class DBMongo
{
private static $manager;
/**
* @link https://php.net/manual/en/mongodb-driver-manager.construct.php
* @return MongoDB\Driver\Manager
*/
public static function manager()
{
try {
if (empty(self::$manager)) {
$host = '127.0.0.1';
$port = 27017;
$user = 'admin';
$password = '123456';
$db = 'demo';
$url = sprintf("mongodb://%s:%s@%s:%-5s/%s", $user, $password, $host, $port, $db);
self::$manager = new MongoDB\Driver\Manager($url);
}
} catch (Exception $exception) {
exit($exception->getMessage());
}
return self::$manager;
}
/**
* @param string $collection
* @return string
*/
private static function getNamespace($collection = '')
{
return sprintf("%s.%s", 'demo', $collection);
}
/**
* 添加文档
* @link https://php.net/manual/en/mongodb-driver-bulkwrite.insert.php
* @param string $collection
* @param array $data
* @return array
*/
public static function insert($collection = '', $data = array())
{
$result = array('_id' => '', 'insert_count' => 0);
$bulk = new MongoDB\Driver\BulkWrite();
$document = array_merge(array('_id' => new MongoDB\BSON\ObjectID()), $data);
$_id = $bulk->insert($document);
$writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000);
$writeResult = self::manager()->executeBulkWrite(self::getNamespace($collection), $bulk, $writeConcern);
if ($writeResult->getInsertedCount() > 0) {
$result = array('_id' => $_id, 'insert_count' => $writeResult->getInsertedCount());
}
return $result;
}
/**
* 批量添加文档
* @link https://php.net/manual/en/mongodb-driver-bulkwrite.insert.php
* @param string $collection
* @param array $data
* @return array
*/
public static function inserts($collection = '', $data = array())
{
$bulk = new MongoDB\Driver\BulkWrite();
foreach ($data as $datum) {
$bulk->insert($datum);
}
$writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000);
$writeResult = self::manager()->executeBulkWrite(self::getNamespace($collection), $bulk, $writeConcern);
return array('insert_count' => $writeResult->getInsertedCount());
}
/**
* 批量删除文档
* @link https://php.net/manual/en/mongodb-driver-bulkwrite.delete.php
* @param string $collection
* @param array|object $filter
* @param array $deleteOptions
* @return array
*/
public static function delete($collection = '', $filter, $deleteOptions = array('limit' => false))
{
$bulk = new MongoDB\Driver\BulkWrite();
$bulk->delete($filter, $deleteOptions);
$writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000);
$writeResult = self::manager()->executeBulkWrite(self::getNamespace($collection), $bulk, $writeConcern);
return array('delete_count' => $writeResult->getDeletedCount());
}
/**
* 批量更新文档
* @link https://php.net/manual/en/mongodb-driver-bulkwrite.update.php
* @param string $collection
* @param object|array $filter
* @param object|array $newObj
* @param array $updateOptions
* bool $updateOptions['multi'] 为true时,更新一条。为false批到批量更新
* bool $updateOptions['upsert'] 文档不存在时,为true则添加。为false不添加
* @return array
*/
public static function update($collection = '', $filter, $newObj, $updateOptions = array())
{
$bulk = new MongoDB\Driver\BulkWrite();
$bulk->update($filter, $newObj, $updateOptions);
$writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000);
$writeResult = self::manager()->executeBulkWrite(self::getNamespace($collection), $bulk, $writeConcern);
return array(
'upserted_count' => $writeResult->getUpsertedCount(),
'update_count' => $writeResult->getMatchedCount()
);
}
/**
* 查询文档
* @link https://php.net/manual/en/mongodb-driver-query.construct.php
* @param string $collection
* @param array|object $filter
* @param array $queryOptions
* @return MongoDB\Driver\Cursor
* @throws MongoDB\Driver\Exception\Exception
*/
public static function find($collection = '', $filter, $queryOptions = array())
{
$query = new MongoDB\Driver\Query($filter, $queryOptions);
return self::manager()->executeQuery(self::getNamespace($collection), $query);
}
}
使用
// 添加文档
$result = DBMongo::insert('demo', array('name' => 'yaf'));
var_dump('<pre>', $result);
$data = array(
array('name' => 'yaf - 1'),
array('name' => 'yaf - 2'),
array('name' => 'yaf - 3'),
array('name' => 'yaf - 4'),
array('name' => 'yaf - 5'),
array('name' => 'yaf -6')
);
// 批量添加文档
$result = DBMongo::inserts('demo', $data);
var_dump('<pre>', $result);
// 批量删除文档
$result = DBMongo::delete('demo', array('name' => 'yaf'), array('limit' => true));
var_dump('<pre>', $result);
// 批量更新文档
$result = DBMongo::update(
'demo',
array('name' => 'yaf'),
array('$set' => array('name' => 'yaf - update')),
array('multi' => true, 'upsert' => false)
);
var_dump('<pre>', $result);
$field = array(
'name' => 'yaf - update'
);
$options = array(
'skip' => 0,
'limit' => 5,
'stor' => array('_id' => -1)
);
// 查找文档
$cursor = DBMongo::find('demo', $field, $options);
foreach ($cursor as $item) {
var_dump('<pre>', $item);
}
网友评论