美文网首页
PHP7mongo使用

PHP7mongo使用

作者: 懒人程序猿 | 来源:发表于2020-06-08 01:24 被阅读0次
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);
}

相关文章

网友评论

      本文标题:PHP7mongo使用

      本文链接:https://www.haomeiwen.com/subject/ufuktktx.html