hyperf-mongodb/README.md

154 lines
3.5 KiB
Markdown
Raw Normal View History

2020-07-24 07:08:38 +00:00
# hyperf-mongodb
#### 介绍
2020-07-24 09:00:57 +00:00
基于hyperf的mongodb连接池组件暂不支持协程。基于composer项目yumufeng/hyperf-mongodb和项目mongodb/mongodb做了个性化的优化。
2020-07-24 07:08:38 +00:00
2020-07-24 07:21:49 +00:00
# hyperf mongodb pool
2020-07-24 07:08:38 +00:00
2020-07-24 07:21:49 +00:00
```
composer require adamchen1208/hyperf-mongodb
```
2020-07-24 07:08:38 +00:00
2020-07-24 07:21:49 +00:00
## 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),
],
],
];
```
2020-07-24 07:08:38 +00:00
2020-07-24 07:21:49 +00:00
# 使用案例
2020-07-24 07:08:38 +00:00
2020-07-24 07:21:49 +00:00
使用注解,自动加载
**\Hyperf\Mongodb\MongoDb**
```php
/**
* @Inject()
* @var MongoDb
*/
protected $mongoDbClient;
```
2020-07-24 07:08:38 +00:00
2020-07-24 07:21:49 +00:00
#### **tips:**
查询的值是严格区分类型string、int类型的哦
2020-07-24 07:08:38 +00:00
2020-07-24 07:21:49 +00:00
### 新增
2020-07-24 07:08:38 +00:00
2020-07-24 07:21:49 +00:00
单个添加
```php
$insert = [
'account' => '',
'password' => ''
];
$this->$mongoDbClient->insert('fans',$insert);
```
2020-07-24 07:08:38 +00:00
2020-07-24 07:21:49 +00:00
批量添加
```php
$insert = [
[
'account' => '',
'password' => ''
],
[
'account' => '',
'password' => ''
]
];
$this->$mongoDbClient->insertAll('fans',$insert);
```
### 查询
```php
$where = ['account'=>'1112313423'];
$result = $this->$mongoDbClient->fetchAll('fans', $where);
```
### 分页查询
```php
$list = $this->$mongoDbClient->fetchPagination('article', 10, 0, ['author' => $author]);
```
### 更新
```php
$where = ['account'=>'1112313423'];
$updateData = [];
$this->$mongoDbClient->updateColumn('fans', $where,$updateData); // 只更新数据满足$where的行的列信息中在$newObject中出现过的字段
$this->$mongoDbClient->updateRow('fans',$where,$updateData);// 更新数据满足$where的行的信息成$newObject
```
### 删除
```php
$where = ['account'=>'1112313423'];
$all = true; // 为false只删除匹配的一条true删除多条
$this->$mongoDbClient->delete('fans',$where,$all);
```
### count统计
```php
$filter = ['isGroup' => "0", 'wechat' => '15584044700'];
$count = $this->$mongoDbClient->count('fans', $filter);
```
### Command执行更复杂的mongo命令
**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->$mongoDbClient->command('fans', $pipeline);
```