hyperf-mongodb/README.md
2022-10-23 17:16:42 +08:00

234 lines
5.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# hyperf-mongodb
#### 介绍
用于hyperf的mongodb连接池组件暂不支持协程。基于 (
Adam/hyperf-mongodb)[https://gitee.com/adamchen1208/hyperf-mongodb?_from=gitee_search],
改作者好像已经不更新了且源代码有些bug依赖也存在一些问题。
1. 为此我clone该项目进行大幅度的修改和原先项目变动较大所以另起项目进行开源
2. 增加单元测试,优化依赖。
3. 规范代码编写,简洁了源代码中一些不规范,重复高的代码。
# 使用
## 设置仓库源
```
{
"repositories": [{
"type": "composer",
"url": "http://composer.zyimm.com"
}]
}
```
## 安装
```
composer require zyimm/hyperf-mongodb
```
## config
在/config/autoload目录里面创建文件 mongodb.php 添加以下内容
```php
return [
'default' => [
'username' => env('MONGODB_USERNAME', ''),
'password' => env('MONGODB_PASSWORD', ''),
'host' => env('MONGODB_HOST', '127.0.0.1'),
'port' => env('MONGODB_PORT', 27017),
'db' => env('MONGODB_DB', 'test'),
'authMechanism' => 'SCRAM-SHA-256',
//设置复制集,没有不设置
//'replica' => 'rs0',
'pool' => [
'min_connections' => 3,
'max_connections' => 1000,
'connect_timeout' => 10.0,
'wait_timeout' => 3.0,
'heartbeat' => -1,
'max_idle_time' => (float) env('MONGODB_MAX_IDLE_TIME', 60),
],
],
];
```
# 使用案例
使用注解,自动加载
**\Hyperf\Mongodb\Mongodb**
```php
use Hyperf\Di\Annotation\Inject;
/**
* @Inject()
* @var Mongodb
*/
protected $mongodb;
```
#### **tips:**
查询的值是严格区分类型string、int类型的哦
### 查询一条数据
```php
$where = ['_id' => '1'];
$result = $this->$mongodb->findOne('test', $where);
```
### 查询全部数据
```php
$where = ['_id' => '1'];
$result = $this->$mongodb->findAll('test', $where);
```
### 分页查询
```php
$list = $this->$mongodb->findPagination('article', 10, 0, ['author' => $author]);
```
### 查询一条数据_id自动转对象
```php
$where = ['_id' => '1'];
$result = $this->$mongodb->findOneId('test', $where);
```
### 查询全部数据_id自动转对象
```php
$where = ['_id' => '1'];
$result = $this->$mongodb->findAllId('test', $where);
```
### 分页查询_id自动转对象
```php
$list = $this->$mongodb->findPaginationId('article', 10, 0, ['author' => $author]);
```
### 插入一条数据
```php
$insert = [
'_id' => '',
'password' => ''
];
$this->$mongodb->insert('test',$insert);
```
### 插入批量数据
```php
$insert = [
[
'_id' => '',
'password' => ''
],
[
'_id' => '',
'password' => ''
]
];
$this->$mongodb->insertAll('test',$insert);
```
### 更新
```php
$where = ['_id'=>'1112313423'];
$updateData = [];
$this->$mongodb->updateColumn('test', $where,$updateData); // 只更新数据满足$where的行的列信息中在$newObject中出现过的字段
$this->$mongodb->updateRow('test',$where,$updateData);// 更新数据满足$where的行的信息成$newObject
```
### 更新_id自动转对象
```php
$where = ['_id'=>'1112313423'];
$updateData = [];
$this->$mongodb->updateColumnId('test', $where,$updateData); // 只更新数据满足$where的行的列信息中在$newObject中出现过的字段
$this->$mongodb->updateRowId('test',$where,$updateData);// 更新数据满足$where的行的信息成$newObject
```
### 删除
```php
$where = ['_id'=>'1112313423'];
$all = true; // 为false只删除匹配的一条true删除多条
$this->$mongodb->deleteOne('test',$where,$all);
```
### 批量删除
```php
$where = ['_id'=>'1112313423'];
$all = true; // 为false只删除匹配的一条true删除多条
$this->$mongodb->deleteMany('test',$where,$all);
```
### 删除_id自动转对象
```php
$where = ['_id'=>'1112313423'];
$all = true; // 为false只删除匹配的一条true删除多条
$this->$mongodb->deleteOneId('test',$where,$all);
```
### 统计
```php
$filter = ['isGroup' => "0", 'wechat' => '15584044700'];
$count = $this->$mongodb->count('test', $filter);
```
### 聚合查询
**sql****mongodb** 关系对比图
| SQL | MongoDb |
| --- | --- |
| WHERE | $match (match里面可以用andor以及逻辑判断但是好像不能用where) |
| GROUP BY | $group |
| HAVING | $match |
| SELECT | $project |
| ORDER BY | $sort |
| LIMIT | $limit |
| SUM() | $sum |
| COUNT() | $sum |
```php
$pipeline= [
[
'$match' => $where
], [
'$group' => [
'_id' => [],
'groupCount' => [
'$sum' => '$groupCount'
]
]
], [
'$project' => [
'groupCount' => '$groupCount',
'_id' => 0
]
]
];
$count = $this->$mongodb->command('test', $pipeline);
```