linux – ubuntu 添加歡迎畫面
從這裡輸入你要的歡迎字詞,登出後再登入就能看到了
1 2 3 |
sudo vim /etc/motd |
偷懶是程設師的美德
從這裡輸入你要的歡迎字詞,登出後再登入就能看到了
1 2 3 |
sudo vim /etc/motd |
以下介紹三種方法
如果有欄位是專門記錄建立時間,且格式使用 ISODate 那麼可以使用。範例:找出建立時間 (created_at) 介於GMT+8 台灣標準時間的 01 月 01 日 00 點到 09 點的訂單編號
1 2 3 4 5 6 7 8 |
db.order.find({ created_at: { $gte: ISODate('2022-01-01T00:00:00+08:00'), $lte: ISODate('2022-01-01T09:00:00+08:00') } }) |
運算符號可以參考
承上述方法,但是透過 Date() 可以稍微容易一點使用,相差不大。方式有這幾種:
1 2 3 4 5 6 7 8 |
db.order.find({ created_at: { $gte: new Date("2022-01-01T00:00:00"), $lte: new Date("2022-01-01T09:00:00"), } }) |
推薦。如果你的 _id 是使用預設的 ObjectId 那麼本身就已經具備時間戳記,可以配合 Date() 使用。例如找出客戶本地端的 01 月 01 日早上 10 點到 11 點的訂單。
1 2 3 4 5 6 7 8 |
db.order.find({ _id: { $gte: ObjectId.fromDate( new Date("2022-01-01T10:00:00") ), $lte: ObjectId.fromDate( new Date("2022-01-01T11:00:00") ), } }) |
這個方法推薦,是因為有時候忘記添加 created_at 的時候,就可以直接使用 _id 查找。且 _id 本身已經是具有 index 因此很容易使用。
官方提供的 distinct()
會在 php 取得所有列表。
1 2 3 |
$users = User::distinct()->get(['name']); |
當要計算數量如果使用 count()
那會把資料全部撈到 php 然後加總,這會非常吃 php-fpm 所使用的記憶體。
1 2 3 |
$users = User::distinct()->get(['name'])->count(); |
讓 count()
這件事情在取出資料庫之前就完成,由資料庫回傳一個數值是最好的辦法。但現階段必須透過 laravel mongodb 的聚合寫法,以下範例示範:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
db.test_orders.insertMany( [ { _id: 0, name: "Pepperoni", size: "small", price: 19, quantity: 10, date: ISODate( "2021-03-13T08:14:30Z" ) }, { _id: 1, name: "Pepperoni", size: "medium", price: 20, quantity: 20, date : ISODate( "2021-03-13T09:13:24Z" ) }, { _id: 2, name: "Pepperoni", size: "large", price: 21, quantity: 30, date : ISODate( "2021-03-17T09:22:12Z" ) }, { _id: 3, name: "Cheese", size: "small", price: 12, quantity: 15, date : ISODate( "2021-03-13T11:21:39.736Z" ) }, { _id: 4, name: "Cheese", size: "medium", price: 13, quantity:50, date : ISODate( "2022-01-12T21:23:13.331Z" ) }, { _id: 5, name: "Cheese", size: "large", price: 14, quantity: 10, date : ISODate( "2022-01-12T05:08:13Z" ) }, { _id: 6, name: "Vegan", size: "small", price: 17, quantity: 10, date : ISODate( "2021-01-13T05:08:13Z" ) }, { _id: 7, name: "Vegan", size: "medium", price: 18, quantity: 10, date : ISODate( "2021-01-13T05:10:13Z" ) } ] ) |
假設我要知道 test_orders
裡面總共出現幾個 name
,那可以透過聚合的 pipeline 實現。先寫結論
1 2 3 4 5 6 7 8 9 10 |
db.test_orders.aggregate([ // 產生兩個欄位 _id 與 count,_id 指定分組的目標也就是欄位 name,count 則使用 $sum 去加總出現的數量 { $group: { _id: "$name", count: { $sum: 1 } } }, // 將上方結果,再過濾,欄位一樣 _id 與 count,我們只需要加總出現的列表數量,即是達到我們的 distinct 需求 { $group: { _id: 'total', count: { $sum: 1 } } } ]) |
這樣就達到我們要的目標 3 筆。
上述 aggregate()
用了兩次處理,我們分開來看數據。第一次先算出各筆 name
的重複次數
1 2 3 4 5 |
db.test_orders.aggregate([ { $group: { _id: "$name", count: { $sum: 1 } } }, ]) |
看到這裡就知道這份數據,有 3 種 name
。因此可以這麼寫
1 2 3 4 5 6 |
db.test_orders.aggregate([ { $group: { _id: "$name", count: { $sum: 1 } } }, { $group: { _id:'total', count: { $sum: 1 } } } ]) |
先了解 match (8.0 支援) 的應用,後面可以搭配 enum。match 與 switch 用法類似,用於多個項目比較
1 2 3 4 5 6 7 8 9 10 |
$food = "cake"; $description = match ($food) { "cake" => "蛋糕一份", "cafe" => "咖啡一杯", }; echo $description; // 蛋糕一份 |
進階一點的可以是
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$price = function (int $hour){ // 設定 true 讓左側的 單一條件表達式 可以使用變數做邏輯判斷 return match (true) { (11 <= $hour and $hour <= 13) => "399", (14 <= $hour and $hour <= 17) => "299", (18 <= $hour and $hour <= 20) => "499", default => "不販售" }; }; echo $price(7); // 不販售 echo $price(12); // 399 echo $price(15); // 299 echo $price(19); // 499 |
Enum (8.1 支援) ,可以配合 match 做到這樣的轉換
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
enum Project: string { case ID = "001"; case CODE = "HappyNewYear"; // 可以做你想要的轉換 public function desc(): string { return match ($this) { self::ID => "編號", self::CODE => "happy-new-year" }; } } echo Project::ID->name; // ID echo Project::CODE->value; // HappyNewYear echo Project::CODE->desc(); // happy-new-year |
我這邊在主機有多個使用者,每個人都要切換到使用者 ubuntu 下達 docker 相關指令。以下示範由我的帳號是 cary 切換到內建使用者 ubuntu
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
sudo su ubuntu // 位在群組 docker 如果直接下 docker-compose 會出現權限不夠 docker-compose ps // 查看自己目前的 group 有在哪些群組裡,如果沒有 docker id $USER //uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),108(lxd),114(netdev) // 那就下這行把自己的群組加入 docker sudo usermod -aG docker $USER // 再次確認群組已經加入了 docker id $USER // uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),108(lxd),114(netdev),116(docker) // 接著離開再登入 ubuntu exit sudo su ubuntu // 這樣就可以不需要 sudo 了 docker-compose ps |