我在Mongoose中有以下模式:
UserSchema = new Schema({
ratings = [{type : Schema.ObjectId, ref : 'Rating'}] })
ItemSchema = new Schema({
ratings = [{type : Schema.ObjectId, ref : 'Rating'}] })
Rating = new Schema({
user = [{type : Schema.ObjectId, ref : 'User'}],
venue = [{type : Schema.ObjectId, ref : 'Venue'}]
})
他们是对的吗?我应该按用户查询评分,项目评分。另外,我想检查用户是否已经对项目进行了评分。
答案 0 :(得分:1)
以下是您可以使用的以下两个选项。
您可以维护一个单独的集合Rating
,与您在SQL中完成的工作非常相似。
User: voter (reference to User object),
Item: item_voted (reference to item object),
Rating: what so ever user rated
Time: time_rated,
other fields as per your requirements...
现在保持索引超过User
和Item
以提升查询次数,以检查用户是否已对某项目进行了评分。
OR
您可以在User
集合中为该用户评定的项目维护一个数组,并对该数组进行索引。您可以在这里使用User
的数据模型。
items_rated: [item1, item2, item3]
other fields of User as per your requirements...
第二种方法有一个限制,即如果您的BSON记录超过16MB限制它会失败,但在实际使用中,您实际上达到该限制的可能性非常小。虽然没什么可说的。如果你的用户像一些顶级stackoverflow用户一样疯狂,你将达到16MB的墙:P
您可以检查项目是否已被评级的方式(如果您选择第二选择)
if (db.user.count({item_rated: item_k, _id:'user-id-1'}) == 0) { ... }