0

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

彼らは正しいですか?ユーザーによる評価、アイテムの評価を照会する必要があります。また、ユーザーがすでにアイテムを評価しているかどうかを確認したいと考えています。

4

1 に答える 1

1

次の 2 つのオプションを使用できます。

SQL で行う場合と非常によく似た別のコレクションを維持できRatingます。

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クエリをブーストして、ユーザーがアイテムを既に評価しているかどうかを確認します。

ORUserそのユーザーによって評価されたアイテムのコレクション内の配列を維持し、その配列にインデックスを付けることができます。これが、データモデルを使用できるものですUser

items_rated: [item1, item2, item3]
other fields of User as per your requirements...

この 2 番目のアプローチには、BSON レコードが 16MB の制限を超えると失敗するという制限がありますが、実際の使用では、実際にその制限に達する可能性は非常に低くなります。何とも言えないけれど。あなたのユーザーがスタックオーバーフローのトップユーザーのようにマニアックであることが判明した場合、16MB の壁にぶつかるでしょう :P

アイテムが評価されているかどうかを確認する方法 (第 2 選択を選択した場合)

if (db.user.count({item_rated: item_k, _id:'user-id-1'}) == 0) { ... }
于 2012-12-13T21:30:41.193 に答える