thread-master/apps/backend/generate/database
王性驊 fcc76911bb fix frontend 2026-07-10 12:54:45 +00:00
..
mongo fix frontend 2026-07-10 12:54:45 +00:00
README.md fix frontend 2026-07-10 12:54:45 +00:00

README.md

Database migrationsgolang-migrate + MongoDB

第一性原理: indexseed 用 檔案 宣告,交給 migrate;沒有 Go seederinit 程式。

工具:golang-migrate
Mongo driver 讀的是 JSONdb.runCommand 陣列),不是 shell .js

目錄

generate/database/mongo/
  000001_members_indexes.up.json
  000001_members_indexes.down.json
  000002_jobs_indexes.up.json
  ...
  000003_seed_admin.up.json    # 可選種子

命名:{version}_{name}.up.json / .down.json

指令

# 安裝 CLI一次
go install -tags 'mongodb' github.com/golang-migrate/migrate/v4/cmd/migrate@latest

# 連線字串要含 database 名
export MONGO_URL='mongodb://127.0.0.1:27017/haixun'

# 套用全部
migrate -path generate/database/mongo -database "$MONGO_URL" up

# 回滾一步
migrate -path generate/database/mongo -database "$MONGO_URL" down 1

# 看版本
migrate -path generate/database/mongo -database "$MONGO_URL" version

Makefile

make migrate-up
make migrate-down

何時寫什麼

類型 放哪 範例
Index / collection 約束 *.up.json createIndexes members.uid unique
種子資料 另開 version如 000003_seed_* admin 帳
業務邏輯、密碼 runtime 產生 不要寫進 migration 用 API / 測試 helper

種子 admin 預設:admin@haixun.local / admin123hash 寫死在 up 檔;正式環境請改或不要跑 seed migration

與 gateway

make migrate-up,再 go run . -f etc/gateway.yaml(需 Mongo + Redis

不要

  • 手寫 Go seederinit
  • 手寫 migration runner
  • 把 stand-alone 電商 .txt 當 migrate 來源(格式不同;要用 JSON runCommand