如何检查用户是否已在NodeJS&中评估该项目猫鼬申请?

时间:2012-12-13 20:30:34

标签: node.js mongodb mongoose

我在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'}]
})

他们是对的吗?我应该按用户查询评分,项目评分。另外,我想检查用户是否已经对项目进行了评分。

1 个答案:

答案 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...

现在保持索引超过UserItem以提升查询次数,以检查用户是否已对某项目进行了评分。

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) { ... }