歡迎使用 phper666/mongo-db,地址:https://github.com/phper666/mongo-db
1、預設使用mongodb提供的庫來封裝,官方git地址:https://github.com/mongodb/mongo-php-libra...
2、支援類似mysql orm的一些操作
3、支援遷移檔案
4、只支援hyperf框架,由於swoole協程不支援mongodb,所以所有的方法都採用task程式來實現,該包已經封裝好所有的方法都會投遞到task程式進行操作,task程式建議開啟多一點
5、該包預設使用了連線池
composer require phper666/mongo-db
php bin/hyperf.php mongodb:publish --config
<?php
declare(strict_types=1);
return [
'default' => [
'username' => env('MONGODB_USERNAME', ''), // mongodb使用者名稱
'password' => env('MONGODB_PASSWORD', ''), // mongodb密碼
'host' => env('MONGODB_HOST', '127.0.0.1'), // mongodb host
'port' => env('MONGODB_PORT', 27017),
'db' => env('MONGODB_DB', 'test'), // mongodb庫名
'authMechanism' => env('MONGODB_AUTH_MECHANISM', 'SCRAM-SHA-256'), // 認證的方式
'driver_options' => [], // 驅動配置
'migration' => [
'path' => BASE_PATH . '/migrations/mongodb', // 遷移檔案的路徑
],
//設定複製集,沒有不設定
// 'replica' => 'rs0',
'pool' => [ // 連線池的一些配置
'min_connections' => 1,
'max_connections' => 100,
'connect_timeout' => 10.0,
'wait_timeout' => 3.0,
'heartbeat' => -1,
'max_idle_time' => (float)env('MONGODB_MAX_IDLE_TIME', 60),
],
],
];
php bin/hyperf.php mongodb:migrate Test
上面的命令會自動生成一個遷移檔案,會生成一個檔案到配置檔案指定的遷移目錄中
<?php
declare(strict_types=1);
namespace Phper666\MongoDb\Example\Migrations;
use Phper666\MongoDb\MongoDbMigration;
class CreateTestCollection extends MongoDbMigration
{
/**
* 支援很多方法,請詳細去看MongoDbMigration這個類
* @throws \Phper666\MongoDb\Exception\MongoDBException
*/
public function up()
{
$msg = [];
$msg[] = $this->createCollection('test'); // 建立一個表
$data = [
['dd' => 1, 'tt' => 2],
['dd' => 2, 'tt' => 4],
];
$msg[] = $this->insertMany('test', $data); // 插入多條資料
$msg[] = $this->createIndex('test', ['dd' => 1, 'tt' => 1]); // 在該表上建立索引
$msg[] = $this->createIndexes('test', [['dd' => 1], ['tt' => 1]]); // 在該表上批次建立索引
$msg[] = $this->dropCollection('test'); // 刪除一個表
return $msg;
}
/**
* 遷移失敗時會執行
* @throws \Phper666\MongoDb\Exception\MongoDBException
*/
public function down()
{
return 'error';
}
}
php bin/hyperf.php mongodb:migration
上面這個命令會遷移你所有生成的檔案,遷移檔案路徑在配置檔案裡面配置
7.1上面能像orm一樣能進行遷移了,解決了升級的問題,下面我們來說一下開發時候怎麼使用
7.2 在你的專案裡面新建一個目錄,該目錄叫mongo(自行命名,類似orm的model)
7.3 比如我現在專案裡面有一個庫,叫test,test裡面有兩個collection,名字為co1,co2(你把它當成mysql的表一樣)
7.4 我在mongo目錄新建兩個檔案,叫Co1Mongo和Co2Mongo,都繼承\Phper666\MongoDb\MongoDb,例子如下:
<?php
declare(strict_types=1);
namespace TmgAddons\WebQySession\Admin\Mongo;
use Phper666\MongoDb\MongoDb;
class TestMongo extends MongoDb
{
/**
* mongodb表
* @var null
*/
public $collectionName = 'co1';
}
7.5 查詢co1中的一條資料,例子如下:
<?php
declare(strict_types=1);
namespace TmgAddons\WebQySession\Admin\Controller;
use Hyperf\Di\Annotation\Inject;
use Hyperf\HttpServer\Annotation\Controller;
use Hyperf\HttpServer\Annotation\GetMapping;
use TmgAddons\WebQySession\Admin\Mongo\Co1Mongo;
/**
* @Controller(prefix="/test")
* Class TestController
* @package TmgAddons\WebQySession\Admin\Controller
*/
class TestController
{
/**
* @Inject()
* @var Co1Mongo
*/
private $co1Mongo;
/**
* @GetMapping(path="")
* [[@return](https://learnku.com/users/31554)](https://learnku.com/users/31554) array
* @throws \Phper666\MongoDb\Exception\MongoDBException
*/
public function test()
{
// 呼叫test方法時,就能查出co1表中的一條資料了,是不是很簡單!
return response_success($this->co1Mongo->findOne());
}
}
7.6 支援有多種方法,詳細你可以到Phper666\MongoDb\MongoDb檢視,或者你可以去看官方的php-mongodb文件,https://docs.mongodb.com/php-library/v1.5/reference/method/MongoDBCollection-createIndexes/
如果你有使用的問題或者建議,歡迎你提一個isset,由於太匆忙,等我開發完現在的專案,我會重新最佳化和迭代這個包,如果開發中有遇到問題或者有更好的寫法,我會迭代到這個包這裡。
1、如果你使用的是mongodb預設生成_id,那麼更新和刪除我預設已經幫你使用MongoDB\BSON\ObjectId進行了轉換,所以你無需再轉換,你直接把_id對應的字串傳進去就好了,比如要根據_id獲取某條資料,$filter=['_id' => 'xxxxxx']即可。獲取資料時,我也預設幫你把_id轉成了字串
2、由於我這邊開發時間比較緊急,有很多東西尚未完善,後期會迭代
使用過程中有遇到問題,歡迎提isset
本作品採用《CC 協議》,轉載必須註明作者和本文連結