Search by

menciusnh4 / hyperf-mongodb

menciusnh4

There is no license information available for the latest version (v2.2.0) of this package.

This package's canonical repository appears to be gone and the package has been frozen as a result. Email us for help if needed.

Package info

github.com/menciusnh4/hyperf-mongodb

pkg:composer/menciusnh4/hyperf-mongodb

Statistics

Installs: 3 732

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v2.2.0 2022-10-21 07:59 UTC

This package is auto-updated.

Last update: 2026-09-21 18:43:38 UTC


README

composer require menciusnh4/hyperf-mongodb

config

在/config/autoload目录里面创建文件 mongodb.php 添加以下内容

return [
    'default' => [
        'username' => env('MONGODB_USERNAME', ''),
        'password' => env('MONGODB_PASSWORD', ''),
        'host' => [
            sprintf('%s:%d',env('MONGODB_HOST', '127.0.0.1'), env('MONGODB_PORT', 27017))
        ],
        'db' => env('MONGODB_DB', 'test'),
        'options'  => [
            'database' => 'admin',
            // 需要配置 username
            'authMechanism' => 'SCRAM-SHA-256',
            //设置复制集,没有不设置
            //            'replica' => env('MONGODB_Replica', 'rs0'),
            //            'readPreference' => env('MONGODB_ReadPreference', 'primary')
        ],
        'pool' => [
            'min_connections' => 10,
            'max_connections' => 100,
            'connect_timeout' => 10.0,
            'wait_timeout' => 3.0,
            'heartbeat' => -1,
            'max_idle_time' => (float)env('MONGODB_MAX_IDLE_TIME', 60),
        ],
    ],
];

使用案例

使用注解,自动加载 \Menciusnh4\Mongodb\MongoDb

/**
 * @Inject()
 * @var MongoDb
*/
 protected $mongoDbClient;

tips:

查询的值,是严格区分类型,string、int类型的哦

新增

单个添加

$insert = [
            'account' => '',
            'password' => ''
];
$this->mongoDbClient->insert('fans',$insert);

批量添加

$insert = [
            [
                'account' => '',
                'password' => ''
            ],
            [
                'account' => '',
                'password' => ''
            ]
];
$this->mongoDbClient->insertAll('fans',$insert);

查询

$where = ['account'=>'1112313423'];
$result = $this->mongoDbClient->fetchAll('fans', $where);
$result = $this->mongoDbClient->fetchAll('fans',
            [
                'id' => [
                    '$in' => ['a', 'b', 'c']
                ]
            ], [
                'sort' => ['sort'=>1]
            ]
        );
# $or 的使用方式
$inputs['filter']['$or'] = [
    [
        '_id' => [
            '$in' => $bull_ids
        ]
    ],
    [
        'for_all' => [
            '$eq' => true
        ]
    ]
];
$result = $this->mongoDbClient->fetchAll('fans', $inputs['filter']);

分页查询

$list = $this->mongoDbClient->fetchPagination('article', 10, 0, ['author' => $author]);

更新

$where = ['account'=>'1112313423'];
$updateData = [];

$this->mongoDbClient->updateColumn('fans', $where,$updateData); // 只更新数据满足$where的行的列信息中在$newObject中出现过的字段
$this->mongoDbClient->updateRow('fans',$where,$updateData);// 更新数据满足$where的行的信息成$newObject

删除

$where = ['account'=>'1112313423'];
$all = true; // 为false只删除匹配的一条,true删除多条
$this->mongoDbClient->delete('fans',$where,$all);

count统计

$filter = ['isGroup' => "0", 'wechat' => '15584044700'];
$count = $this->mongoDbClient->count('fans', $filter);

Command,执行更复杂的mongo命令

sql 和 mongodb 关系对比图

SQL MongoDb
WHERE $match (match里面可以用and,or,以及逻辑判断,但是好像不能用where)
GROUP BY $group
HAVING $match
SELECT $project
ORDER BY $sort
LIMIT $limit
SUM() $sum
COUNT() $sum
$pipeline= [
            [
                '$match' => $where
            ], [
                '$group' => [
                    '_id' => [],
                    'groupCount' => [
                        '$sum' => '$groupCount'
                    ]
                ]
            ], [
                '$project' => [
                    'groupCount' => '$groupCount',
                    '_id' => 0
                ]
            ]
];

$count = $this->mongoDbClient->command('fans', $pipeline);