アイテムとユーザーのスキーマがあります。ユーザーがアイテムを好きまたは嫌いにできるようにしたいのですが、ユーザーだけでなくアイテムにも評価の関連付けを保存したいと思います。
var UserSchema = new Schema({
username : { type: String, required: true, index: { unique: true }
, likes : [{ type: Schema.ObjectId, ref: 'Item'}]
, dislikes : [{ type: Schema.ObjectId, ref: 'Item'}]
, ratings: [???]
});
var ItemSchema = new Schema({
name: { type: String},
, likes : [{ type: Schema.ObjectId, ref: 'User'}]
, dislikes : [{ type: Schema.ObjectId, ref: 'User'}]
, ratings: [???]
});
ユーザーはアイテム参照を保存し、アイテムは好き/嫌いのユーザー参照を保存します。ただし、ユーザーとユーザーがアイテムを評価した値の両方が必要なため、評価を属性として保存する方法がわかりません。
item.ratings.forEach(function(rating){
<%= rating.user.username %> gave <%= item.name %> a <%= rating.value %>.
});
また、ユーザーが評価したアイテムのリストと評価値を取得したいと思います。
user.ratings.forEach(function(rating){
<%= user.username %> has rated <%= rating.item.name %> and gave it a <%= rating.value %>
});
「評価」スキーマはどのようになりますか?2つの値を保存することは可能ですか?ユーザーオブジェクトIDと評価値(整数)とこれらのコレクションがありますか?
私の方法で見られるもう1つの問題は、マングースがまだディープポピュレートをサポートしていないことです。そのため、モジュール(https://github.com/JoshuaGross/mongoose-subpopulate)を使用する必要があります。 -.populate()を使用してデータを取得できるように、複数のレベルのネストがない別の方法でテストまたは保存します
私はnoSQLを初めて使用し、おそらくこれを複雑にしすぎているので、フィードバックをいただければ幸いです。