これをMongoDBで設定する最良の方法は不明です。すべてのユーザにコレクションを再利用するMongoDB
私は2つのコレクションUser
とSkill
を持っています。 Skill
のコレクションには、すべてのユーザーが持つべきスキルのリストがあります。私がやろうとしています何
var SkillSchema = new Schema({
name: { type: String, required: true, trim: true },
category: { type: String, required: true, trim: true }
});
mongoose.model('Skill', SkillSchema);
var UserSchema = new Schema({
_id: { type: String, required: true, trim: true },
first_name: { type: String, required: true, trim: true },
last_name: { type: String, required: true, trim: true },
email_address: { type: String, required: true, trim: true },
skills: [{
skill: { type: ObjectId, ref: 'Skill' },
count: { type: Number, default: 0 },
last_performed: { type: Date }
}]
});
mongoose.model('User', UserSchema);
は、スキルのリストを持っており、各ユーザーは、スキル、そして、彼らは最後にそれを行った日付を持っているlast_performed
プロパティを実行した回数を示しcount
性質を持っています。
私の問題は、各ユーザーのスキルのリストを同じにしたいのですが、ユーザーごとにcount
とlast_performed
のプロパティを一意に更新できます。
現在、スキルIDを参照していて、ユーザースキーマにカウント/日付を設定しています。この問題は、スキルスキーマに別のスキルを追加すると、ユーザーのスキル配列が新しいスキルで更新されないということです。私はスキルを追加/削除するたびに、新しいスキルリストを反映するたびにすべてのユーザーを更新すると考えましたが、これを行う最適な方法ではありません。
スキルスキーマに合わせてユーザーのスキル配列を同期できますか?
各ユーザーのカウント/日付をスキルスキーマに直接追加する方がよいでしょうか?これに伴う唯一の問題は、何千人ものユーザーがいる場合、パフォーマンス上の問題があり、各ユーザーのスキルをカウント/日付で並べ替えるだけで、毎回カウントを返さずにユーザーのスキルを個別に照会するのは簡単ですユーザー?
乾杯、 ベン
'count'プロパティは、ユーザーがスキルを実行した回数をカウントします。スキルの数はカウントされません。混乱させて申し訳ありません。 'count'と' last_performed'プロパティは、各ユーザにも一意です。 – Ben
スキルのカウントを更新しても、まだポピュレートすることができます。スキルスキーマに数を入れることを意味します。また、仮想を見てみましょう。 –
ありがとう、それはそれを行う最も簡単な方法のようです。私は何千もの 'count'と' last_performed'値を各スキルに(各ユーザに一度)保存すると、それを照会するときのパフォーマンスにヒットするかどうかはわかりませんでした。 – Ben