三日坊主の繰り返し

大体のことを3日で飽きる人のぼやきです。広く浅く色々手を出していこうと思います。気持ちだけは若くいたい。

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);
          }
        });