美文网首页
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