最近因為部署有些狀況,反而需要因應各環境 index 不同,分別有不同的調整,查了一下 MongoDB 並沒有類似的語法,只要是
Create 時名稱重複
Drop 不存在的 index
都會噴錯,導致後續語法不能繼續執行,因此自己寫了一個概念類似 upsert index 或者像是 insert ignore 的方法。
思路
建立時,遇到
名稱不重複:
欄位一樣,可刪除舊的或者忽略新的
欄位不同,建立新的
名稱重複:
欄位一樣,略過此建立
欄位不同,先 drop 舊的再建新的
看起來是蠻簡單的,就來確認各項功能。
Step1 取得現有 index
這個應該是相對簡單一點,我們只需擷取 keyName 與 fields,並回傳結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
getCurrentIndexes: function (){
let that = this; var bson = db.getCollection(`testCollection`).getIndexes(); var json = JSON.stringify(bson); var obj = JSON.parse(json); var dict = newObject(); dict = {};
let that = this; var needDeleteIndexes = []; var spliceIndex = [];
// 外層迴圈逐一確認想新增的 index for(var itr inthis.readyToCreateIndexes){ let createName = this.readyToCreateIndexes[itr].name; let createKey = JSON.stringify(this.readyToCreateIndexes[itr].key);