假設資料如下:
- local DB裡面的test Collection
SELECT
SELECT可以這樣寫:
DB::connection('mongodb')->collection('test')->get();
- 由於config/database.php中設定的default DB_CONNECTION是mysql,所以這邊特別指定使用mongodb connection。
回傳結果如下:
事實上,上述的SELECT也可以改成用Model的方式去寫:
namespace App\Models;
use Jenssegers\Mongodb\Eloquent\Model;
class Test extends Model
{
protected $connection = 'mongodb';
protected $collection = 'test';
}
SELECT直接這樣用,結果跟上述回傳是一樣的:
use App\Models\Test;
Test::get();
INSERT
用法跟insert mysql一樣,由於沒有disabled timestamp,也會順便塞updated_at, created_at欄位。
$test = new Test;
$test->name = 'ABC';
$test->nickname = 'Vic';
$test->save();
在Model將$timestamps disabled,則不會塞updated_at, created_at欄位。
另一種方式,可以用create method:
- $guarded = [] 設定所有欄位fillable。
Test::create([
'name' => 'ABC',
'nickname' => 'Vic'
]);
UPDATE
比如update這筆document:
Test::where('_id', '62aadfec8d55483add05ff95')
->update([
'name' => 'DEF',
'email' => '[email protected]'
]);
更新結果如下:
DELETE
將這筆document刪除:
Test::where('_id', '62aadfec8d55483add05ff95')->delete();
軟刪除
use Jenssegers\Mongodb\Eloquent\SoftDeletes;
use SoftDeletes;
Test::where('_id', '62aadf078d55483add05ff94')->delete();
不難發現,其實在Laravel中對MongoDB做CRUD,寫法上跟MySQL CRUD是一樣的,所以只要有使用過MySQL,有基本CRUD觀念,就能很快上手。
本筆記參考:
- https://kb.objectrocket.com/mongo-db/how-to-insert-mongodb-document-using-laravel-1079
- https://stackoverflow.com/questions/29712231/update-mongodb-with-laravel-5-jenssegers