sequelize實現(xiàn)bulk upsert

sequelize是沒有支持 bulkUpsert這個方法的
但是我們借助bulkCreate
看碼U豕臁E浊蕖:

await CompositionAnswer.bulkCreate(answerList, {
  updateOnDuplicate: ['answer', 'updatedAt']
})

以上代碼可以實現(xiàn)插入多個數(shù)據(jù)時涨颜,若其中有重復(fù)的數(shù)據(jù)项滑,只對 answerupdatedAt進行更新依沮。

那么關(guān)鍵來了,怎么判定數(shù)據(jù)重復(fù)枪狂,如果我不想使用表的默認(rèn)主鍵(比如id)危喉,怎么辦?


思考兩秒分割線


答案就是 州疾,設(shè)置unique索引9枷蕖!严蓖!

  static options = {
    indexes: [
      {
        name: 'composition_answer_index',
        fields: [ 'exercise_id' ]
      },
      {
        name: 'composition_answer_index_unique',
        unique: true,
        fields: ['exercise_id', 'question_id', 'question_material_id']
      }
    ]
  }

  static init (sequelize) {
    super.init({
      sequelize,
      attributes: this.attributes, 
      tableName: 'composition_answer',
      options: this.options
    })
  }

composition_answer_index_unique 就是我們的唯一索引薄嫡,當(dāng)出現(xiàn)重復(fù)的數(shù)據(jù)時,不會進行插入谈飒,而是更新岂座。

但是sequelize對于uniqueKeys設(shè)置有bug(目前最新版本6.2.3),只到上邊那一步時杭措,bulkCreate時還是沒有識別到唯一索引费什。

hack方式就是,在attributes的字段,設(shè)置上 索引名稱鸳址。

static attributes = {
    exerciseId: {
      unique: 'composition_answer_index_unique',  //就是他4耱健!稿黍!
      type: DataTypes.INTEGER,
      field: 'exercise_id'
    },
    questionId: {
      unique: 'composition_answer_index_unique',  // 和他U钍荨!巡球!
      type: DataTypes.INTEGER,
      field: 'question_id'
    },
    questionMaterialId: {
      unique: 'composition_answer_index_unique', // 還有他Q糟濉!酣栈!
      type: DataTypes.INTEGER,
      field: 'question_material_id',
      allowNull: true
    }
}

現(xiàn)在bulkUpsert的功能已經(jīng)實現(xiàn)了~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末险胰,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子矿筝,更是在濱河造成了極大的恐慌起便,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窖维,死亡現(xiàn)場離奇詭異榆综,居然都是意外死亡,警方通過查閱死者的電腦和手機铸史,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門鼻疮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人沛贪,你說我怎么就攤上這事陋守≌鸸螅” “怎么了利赋?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長猩系。 經(jīng)常有香客問我媚送,道長,這世上最難降的妖魔是什么寇甸? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任塘偎,我火速辦了婚禮,結(jié)果婚禮上拿霉,老公的妹妹穿的比我還像新娘吟秩。我一直安慰自己,他們只是感情好绽淘,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布涵防。 她就那樣靜靜地躺著,像睡著了一般沪铭。 火紅的嫁衣襯著肌膚如雪壮池。 梳的紋絲不亂的頭發(fā)上偏瓤,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機與錄音椰憋,去河邊找鬼厅克。 笑死,一個胖子當(dāng)著我的面吹牛橙依,可吹牛的內(nèi)容都是我干的证舟。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼窗骑,長吁一口氣:“原來是場噩夢啊……” “哼褪储!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起慧域,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤鲤竹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后昔榴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辛藻,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年互订,在試婚紗的時候發(fā)現(xiàn)自己被綠了吱肌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡仰禽,死狀恐怖氮墨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吐葵,我是刑警寧澤规揪,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站温峭,受9級特大地震影響猛铅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凤藏,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一奸忽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧揖庄,春花似錦栗菜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春腌歉,著一層夾襖步出監(jiān)牢的瞬間蛙酪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工翘盖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留桂塞,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓馍驯,卻偏偏與公主長得像阁危,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子汰瘫,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345