# T701 — mongo product match indexes > Status: `done` > Milestone: `M0` · Phase A > Kind: `feat` · Est. change: `~120 lines` ## Goal 新增產品型 watch 與 ProductMatch 查詢索引,同時保留既有 Opportunity 唯一鍵與舊資料可讀性。 ## Depends on - T700 ## Inputs - `../spec.md` §6、§8 - `apps/backend/generate/database/mongo/000014_demand_radar_indexes.*.json` - 代表性 nested ProductMatch 查詢與排序條件 ## Outputs | 路徑 | 動作 | 說明 | |------|------|------| | `apps/backend/generate/database/mongo/000015_brand_product_radar_indexes.up.json` | add | watch context、產品查詢與 primary 排序索引 | | `apps/backend/generate/database/mongo/000015_brand_product_radar_indexes.down.json` | add | 只移除本 migration 新增索引 | | `apps/backend/internal/module/radar/repository/**_test.go` | edit/add | 舊唯一鍵與查詢 shape 測試 | ## Behavior - `(owner_uid, external_id)` 唯一索引不可改成含 product_id。 - 索引不得依賴所有舊文件都有新欄位。 - 避免無效 compound multikey 設計;以代表性 explain 確認 product filter 可用索引。 ## Out of scope - 資料批次回填或刪除舊索引 - repository merge 實作(T732) ## Acceptance - [x] migration JSON 可解析,且只新增本 migration 的索引。 - [x] 既有 owner/external 唯一鍵未被 product_id 改寫。 ```bash cd apps/backend && go test ./internal/module/radar/repository/... -count=1 ``` Implementation result (2026-08-10): added the 000015 watch/opportunity ProductMatch query indexes and a migration-shape regression test; the repository package passes.