34001


sequelize初心者です。  
TwitterやFacebookのoAuth認証をして、ユーザー情報をデータベースに保存したいと思っています.しかし、oAuth認証を複数サイトで行うとデータベースに登録したuseridなど情報が他サイトと重複してしまう問題があります。  
それを回避するために、指定したuseridが既にデータベースに存在しない時のみ、データベースを更新するような処理を行いたいと思っています。  
そのような処理を行うためにはsequelizeのfindOrCreateを使えばいいということは分かったのですが、findOrCreateの使い方がよく分かりません。  
upsertの使い方は分かっていて、下のupsertの記述のようにfindOrCreateを行いたいと思っています。ただ、if(userid!="○○○"
&& username!="○○○")というような条件分岐を行いたいです。

[code]

                User.upsert
                ({
                    userid: profile.id,
                    username: profile.username,
                    accountid: c+1
                }).then
                (() => {
                    done(null, profile);
                });
    
[/code]

どのようにしたら良いでしょうか。


CC BY-SA 3.0
2017-04-13T13:09:29.680
33984
2017-04-14T05:39:43.640
2017-04-14T01:47:14.207
5793
22541
question
database
sequelizeのfindOrCreateの使い方について


実際に試してはいませんが、[ドキュメント](http://docs.sequelizejs.com/en/latest/docs/models-
usage/#findorcreate-search-for-a-specific-element-or-create-it-if-not-
available)には次のようなコードが例示されているので、

[code]

    User
      .findOrCreate({where: {username: 'sdepold'}, defaults: {job: 'Technical Lead JavaScript'}})
      .spread(function(user, created) {
        console.log(user.get({
          plain: true
        }))
        console.log(created)
      })
    
[/code]

こういう感じになるのではないでしょうか。

[code]

    User.findOrCreate({
      where: { userid: profile.id, username: profile.username },
      defaults: { accountid: c + 1 }
    }).spread((user, created) => {
      done(null, profile);
    });
    
[/code]

accountid をどのように生成しているのかわかりませんが、cがカウンタ的なものなら、`created === true`
の場合のみインクリメントする等した方がいいかもしれません。


CC BY-SA 3.0
2017-04-14T05:39:43.640
34001
2017-04-14T05:39:43.640
8000
33984
answer