mongo のsave, update
mongodb のデータをupdate したときの挙動を確認したところ、なぜか2回update が走っていた。
色々調べたところ、save, update はPromise を返さないことが判明。
update 処理をawait で処理するようにしていたが、それが原因で2回更新されていた模様。
- 2回更新が走っていた処理
let result = await model.update( {"_id": new ObjectId("id")}, {$push: pushValue}, (err) => { if (err) throw new Error(err); } ); return result;
update の結果をPromise で返すようにすることで1回更新されるようになり、意図した通りの挙動になった。
- 想定通り1回更新される処理
return new Promise((resolve, reject) => { try { model.update( { "_id": new ObjectId(qid) }, { $push: pushVal }, (err, result) => { if (err) return reject(err); // ← ここはちゃんと動作確認できてない resolve(result); }); } catch (err) { reject(err); } });