我有一个项目和一个用户的架构。我想让用户喜欢或不喜欢一个项目,我还想在项目和用户上存储一个评级关联。
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 %>
});
我的“评分”架构应该是什么样的?是否可以存储两个值?一个用户对象 id 和一个评级值(整数)并有这些的集合?
我用我的方法看到的另一个问题是猫鼬还不支持深度填充,所以我必须为它使用一个模块(https://github.com/JoshuaGross/mongoose-subpopulate),这在很大程度上是un - 测试或以不超过一层嵌套的不同方式存储它,因此我可以使用 .populate() 获取我的数据
任何反馈都表示赞赏,因为我是 noSQL 的新手,也许我过于复杂了。