2017-09-06 9 views
1

Userモデルのさまざまなログイン方法をmongoに関連付けようとしています。複数のアカウントのネストされたアソシエーション

const UserSchema = new Schema({ 
    email: String 
    isVerified: { default: false, type; Boolean } 
    accounts: { 
    ref: 'Account', 
    type: Schema.Types.ObjectId 
    } 
}) 

const AccountSchema = new Schema({ 
    facebook: { 
    ref: 'FacebookAccount', 
    type: Schema.Types.? 
    }, 
    local: { 
    ref: 'LocalAccount', 
    type: Schema.Types.? 
    }, 
    twitter: { 
    ref: 'TwitterAccount', 
    type: Schema.Types.? 
    }, 
}) 

const LocalAccount = new Schema({ 
    email: String, 
    name: String, 
    phone: String, 
    password: String, 
    _user: { 
    ref: 'User', 
    type: Schema.Types.ObjectId 
    } 
}) 

私はデータは以下のように見ている私に戻って来て取得したいと思いは次のようになります。

{ 
    _id: '12345789', 
    email: '[email protected]', 
    accounts: { 
    facebook: { ... } 
    local: { ... } 
    } 
} 

私はそれゆえSchema.Types.?、個々のアカウントにかかわらず、これらの団体については本当にわからないんです。 vs オブジェクトの参照に埋め込まれている必要があるかどうかもわかりません。私はサークルに出て、団体がマッチするようにしようとしています。

+0

を持っているので、それを持っている冗長なようだと私はemailを削除しましたか?これは過労のようです。 – Mikey

+0

@ミッキー私はそれを実際には考えなかった。私はそれが実行可能な考えだと思います。ユーザーが存在するかどうかを検索し、認証に使用されるログイン方法に応じて、対応する_account_にデータを格納します。私はこれを調べて、それが私が達成しようとしているものとうまくいくかどうかを見ます。アイデアをありがとう。 – rockchalkwushock

答えて

2

私はあなたが埋め込まれているとシンプルに保つことをお勧めします。ここで

は、迅速な提案です:

const UserSchema = new Schema({ 
    isVerified: { 
     default: false, 
     type: Boolean 
    }, 
    accounts: { 
     local: { 
      email: String, 
      name: String, 
      phone: String, 
      password: String 
     }, 
     facebook: { 
      // fields related to Facebook 
     }, 
     twitter: { 
      // fields related to Twitter 
     } 
    } 
}) 

あなたがすでにこのためのコレクションを使用しないのはなぜaccounts.local.email

+0

アドバイスをいただきありがとうございました。 – rockchalkwushock

関連する問題