0

ここに 2 つのドキュメントがあります。

var UserSchema = new Schema({
        username: {
          type: String,
          validate: [required,"Username is required"],
          index: {unique: true}
        },
        email: {
            type: mongoose.SchemaTypes.Email,
            validate: [required, 'Email required'],
            index: { unique: true }
        },
        password: {
            type: String,
            validate: [required, 'Password required'],
        },
        socialauth:{
          type:[]
        },

        createdAt: {
            type: Date,
            'default': Date.now
        }
    });

ユーザーTwitterスキーマ:

var UserTrwitterSchema = new Schema({

  authToken: {
      type: String,
      validate: [required,"authToken is required"],
      index: {unique: true}
    },

  authSecret: {
      type: String,
      validate: [required,"authSecret is required"],
      index: {unique: true}
    },
  apiKey: {
        type: String,
        validate: [required, 'Api Key is required'],
    }, 
});

ここでの混乱は次のとおりですuser :ObjectId,。ここではユーザーが外部キーになります。または両方を行いますか?データのクエリに関して最もコストがかからないものは何ですか? ここでは apiKey を使用し、他のすべてのスキーマでも同じことを行いました。これは、私がリレーショナル DB を作成した方法とはまったく異なるものであるため、セカンドオピニオンが必要でした。

4

1 に答える 1

0

他の資格情報 (facebook など) を持つユーザーを受け入れる予定がある場合は、個別の twitter スキーマを作成しません。

代わりに、タイプと資格情報を一意のキーとして使用してプロファイル コレクションを作成し、ユーザー データ (年齢、バイオなど) をユーザー コレクションに格納します。

profile = {
 _id : {type : "email", username : "Justin"},
 creds : {email : "foo@bar.com", pw : "hash"),
 user_id : ObjectId(xys)
}

profile2 = {
 _id : {type : "twitter", username : "JustinBieber"},
 creds : {token : "fatoken", secret : "hash" , key : "key"),
 user_id : ObjectId(xys)

}

ユーザーは次のようになります。

user = {
 _id : ObjectId(xys),
 bio : "really young guy",
 born : date(March 1, 1994)
 ...
}
于 2012-11-29T20:59:58.037 に答える