1. ホーム
  2. mysql

[解決済み] シーケライズの作成・更新

2022-02-14 02:30:58

質問

NodejsプロジェクトでSequelizeを使用していますが、解決に苦労する問題が見つかりました。 基本的に、私はオブジェクトの配列をサーバーから取得し、それをオブジェクトとしてデータベースに挿入するクーロンを持っています(この場合、漫画)。しかし、私はすでにオブジェクトの1つを持っている場合、私はそれを更新する必要があります。

基本的に、私はオブジェクトの配列を持っており、BulkCreate()メソッドを使用することができました。しかし、Cronが再び開始されると、それは解決しないので、私はupsert trueフラグで何らかの更新が必要でした。そして本題。これらの作成または更新の後に一度だけ実行されるコールバックを持つ必要があります。誰かそれを行う方法についてのアイデアを持っていますか?オブジェクトの配列を反復し、それを作成または更新し、その後単一のコールバックを取得する?

ご清聴ありがとうございました。

解決方法は?

からの ドキュメント というクエリーは必要ありません。 where を使用して、オブジェクトを取得した後に更新を実行します。また、プロミスを使うことで、コールバックも簡単になるはずです。

実装方法

function upsert(values, condition) {
    return Model
        .findOne({ where: condition })
        .then(function(obj) {
            // update
            if(obj)
                return obj.update(values);
            // insert
            return Model.create(values);
        })
}

使用方法

upsert({ first_name: 'Taku' }, { id: 1234 }).then(function(result){
    res.status(200).send({success: true});
});

備考

  1. この操作はアトミックではありません。
  2. 2つのネットワークコールを作成します。

ということは、アプローチを再考し、おそらく1つのネットワークコールで値を更新するだけで、どちらかを行うことをお勧めします。

  1. 返された値(つまりrows_affected)を見て、何をすべきかを決める。
  2. 更新操作に成功した場合は成功を返します。これは、リソースが存在するかどうかは、このサービスの責任範囲外であるためです。