【发布时间】:2012-10-11 06:27:17
【问题描述】:
我有一个项目和用户的架构。我想让用户喜欢或不喜欢一个项目,我还想在项目和用户上存储一个评级关联。
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 ref,item存储一个用户的喜欢/不喜欢的参考。不过,我不确定如何将评分存储为属性,因为我想要用户和他们对项目评分的值。
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 和一个评分值(整数)并拥有这些的集合?
我用我的方法看到的另一个问题是 mongoose 还不支持深度填充,所以我必须为它使用一个模块(https://github.com/JoshuaGross/mongoose-subpopulate),即很大程度上未经测试或以不同的方式存储它,不会有超过一层嵌套,所以我可以使用 .populate() 获取我的数据
感谢任何反馈,因为我是 noSQL 的新手,也许我过于复杂了。
【问题讨论】: