Mongo 日期查詢

以下介紹三種方法

使用 ISODate 比對

如果有欄位是專門記錄建立時間,且格式使用 ISODate 那麼可以使用。範例:找出建立時間 (created_at) 介於GMT+8 台灣標準時間的 01 月 01 日 00 點到 09 點的訂單編號

運算符號可以參考

  • $gt 大於
  • $gte 大於等於
  • $lte 小於等於
  • $lt 小於
  • $eq 等於
  • 其他運算符號可以參考官方

使用 new Date()

承上述方法,但是透過 Date() 可以稍微容易一點使用,相差不大。方式有這幾種:

  • new Date(“YYYY-mm-dd”) 返回具有指定日期的 ISODate。
  • new Date(“YYYY-mm-ddTHH:MM:ss”) 指定客戶端本地時區的日期時間,並返回具有 UTC 指定日期時間的 ISODate 。
  • new Date(“YYYY-mm-ddTHH:MM:ssZ”) 指定 UTC 日期時間並返回具有 UTC 指定日期時間的 ISODate。
  • new Date(integer) 將日期時間指定為自 UNIX 紀元(1970 年 1 月 1 日)以來的毫秒數,並返回 ISODate 實例的結果。

使用 _id (ObjectId) 比對

推薦。如果你的 _id 是使用預設的 ObjectId 那麼本身就已經具備時間戳記,可以配合 Date() 使用。例如找出客戶本地端的 01 月 01 日早上 10 點到 11 點的訂單。

參考文章

這個方法推薦,是因為有時候忘記添加 created_at 的時候,就可以直接使用 _id 查找。且 _id 本身已經是具有 index 因此很容易使用。

php – Laravel MongoDB 的 distinct 的 count() 用法

原因

官方提供的 distinct() 會在 php 取得所有列表。

當要計算數量如果使用 count() 那會把資料全部撈到 php 然後加總,這會非常吃 php-fpm 所使用的記憶體。

改用聚合

count() 這件事情在取出資料庫之前就完成,由資料庫回傳一個數值是最好的辦法。但現階段必須透過 laravel mongodb 的聚合寫法,以下範例示範:

1. 建立範例數據

image

2. 使用聚合做到 distinct

假設我要知道 test_orders 裡面總共出現幾個 name,那可以透過聚合的 pipeline 實現。先寫結論

image

這樣就達到我們要的目標 3 筆。

3. 肢解上述

上述 aggregate() 用了兩次處理,我們分開來看數據。第一次先算出各筆 name 的重複次數

image

看到這裡就知道這份數據,有 3 種 name。因此可以這麼寫

image

php – match 與 enum 用法

Match 用法

先了解 match (8.0 支援) 的應用,後面可以搭配 enum。match 與 switch 用法類似,用於多個項目比較

進階一點的可以是

Enum

Enum (8.1 支援) ,可以配合 match 做到這樣的轉換

Linux – ubuntu – docker – 讓使用者不用每次下 sudo docker 的方法

我這邊在主機有多個使用者,每個人都要切換到使用者 ubuntu 下達 docker 相關指令。以下示範由我的帳號是 cary 切換到內建使用者 ubuntu

Linux – 修改 termainal 使用者 root 的 command 版面色彩

最近在 docker (laradock) 切進去 linux 的時候,預設是 root,呈現出來的視窗是黑白,沒有上色

要讓 terminal 的 command 可以呈現繽紛色彩我使用以下方法

接著我們執行

以上存擋後,下指令

就會有色彩出現了