2017-03-06 1 views
0

これをMongoDBで設定する最良の方法は不明です。すべてのユーザにコレクションを再利用するMongoDB

私は2つのコレクションUserSkillを持っています。 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性質を持っています。

私の問題は、各ユーザーのスキルのリストを同じにしたいのですが、ユーザーごとにcountlast_performedのプロパティを一意に更新できます。

現在、スキルIDを参照していて、ユーザースキーマにカウント/日付を設定しています。この問題は、スキルスキーマに別のスキルを追加すると、ユーザーのスキル配列が新しいスキルで更新されないということです。私はスキルを追加/削除するたびに、新しいスキルリストを反映するたびにすべてのユーザーを更新すると考えましたが、これを行う最適な方法ではありません。

スキルスキーマに合わせてユーザーのスキル配列を同期できますか?

各ユーザーのカウント/日付をスキルスキーマに直接追加する方がよいでしょうか?これに伴う唯一の問題は、何千人ものユーザーがいる場合、パフォーマンス上の問題があり、各ユーザーのスキルをカウント/日付で並べ替えるだけで、毎回カウントを返さずにユーザーのスキルを個別に照会するのは簡単ですユーザー?

乾杯、 ベン

答えて

1

skills : [{ type: ObjectId, ref: 'Skill' }]。あなたがセーブやアップデートをするときにスキルを追加したいのであれば、Idsを配列にプッシュするだけです。

スキルの配列に値を設定し、スキル配列を数えます。それはあなたにカウントを与えるでしょう。

スキルモデルにlast_performedがある場合。値を入力した後にアクセスします

+0

'count'プロパティは、ユーザーがスキルを実行した回数をカウントします。スキルの数はカウントされません。混乱させて申し訳ありません。 'count'と' last_performed'プロパティは、各ユーザにも一意です。 – Ben

+0

スキルのカウントを更新しても、まだポピュレートすることができます。スキルスキーマに数を入れることを意味します。また、仮想を見てみましょう。 –

+0

ありがとう、それはそれを行う最も簡単な方法のようです。私は何千もの 'count'と' last_performed'値を各スキルに(各ユーザに一度)保存すると、それを照会するときのパフォーマンスにヒットするかどうかはわかりませんでした。 – Ben

関連する問題