mongo – 安裝 mongodump 的方法

我目前要在現在的主機,備份遠端的 mongo,那麼必須要在本機使用 mongodump,要安裝工具

apt-get update
apt install mongo-tools

這樣就可以下指令

mongodump --forceTableScan --host="遠端 IP" --db=你想備份的資料庫 --out="匯出的絕對路徑" --gzip

Docker – 從 Container 的網路連線到 host 主機外的連線方法

我在 Host 主機中,想要把 Docker 中的 A Container連線到 Host 上 Docker 外的其他服務,如資料庫 MongoDB,可以直接透過 “host.docker.internal” 連線,如下圖

我打算在 A Container 透過 cli 備份 host 上的 MongoDB 資料庫,那麼就可以這麼下指令
mongodump --forceTableScan --host="host.docker.internal" --db=MyDatabase --out="/var/www/backup" --gzip

參考官方:https://docs.docker.com/desktop/networking/

php – 錯誤解決方法:LogicException: Please make sure the PHP Redis extension is installed and enabled.

這幾天 laradock 重新安裝,跑 test 會出現
LogicException: Please make sure the PHP Redis extension is installed and enabled.

追原因應該是 php-redis 現在也要使用版本號的關係,但是 laradock 的 Dockerfile 沒更新

查找已安裝的套件

sudo dpkg -l | grep php

因此在 workspace 下指令即可

apt-get update

# 先查詢可安裝的套件是否存在
apt-cache search php7.4-redis

# 執行安裝
apt-get install php7.4-redis

檢查看是否安裝

dpkg -l | grep php 

# 或

php -m

這樣就正常了

linux – ubuntu 添加歡迎畫面

從這裡輸入你要的歡迎字詞,登出後再登入就能看到了

sudo vim /etc/motd

Mongo 日期查詢

以下介紹三種方法

使用 ISODate 比對

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

db.order.find({
    created_at: {
        $gte: ISODate('2022-01-01T00:00:00+08:00'),
        $lte: ISODate('2022-01-01T09:00:00+08:00')
    }
})

運算符號可以參考

  • $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 實例的結果。
db.order.find({
    created_at: {
        $gte: new Date("2022-01-01T00:00:00"),
        $lte: new Date("2022-01-01T09:00:00"),
    }
})

使用 _id (ObjectId) 比對

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

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 因此很容易使用。