我有以下架构:
var projectSchema = new Schema({
user: { type: ObjectId, required: true, index: true, ref: 'user' },
title: { type: String }
}, { versionKey: false });
var userSchema = new Schema({
email: { type: String, required: true, unique: true },
password: { type: String, required: true }
}, { versionKey: false });
var ratingSchema = new Schema({
source_user: { type: ObjectId, required: true, index: true, ref: 'user' },
destination_user: { type: ObjectId, required: true, index: true, ref: 'user' },
vote: { type: String, required: true, enum: ['positive', 'negative'] }
}, { versionKey: false });
我想获得一个项目列表,这些项目按照拥有该项目的用户的评级排序。评级计算为positive_ratings / total_ratings
。
我能够用以下方式计算Mongo的评分:
db.getCollection('ratings').group({
key: { destination_user: true },
reduce: function(obj,prev) { prev.total_feedback += 1; if(obj.vote == 'positive') prev.positive_feedback += 1; prev.feedback = prev.positive_feedback / prev.total_feedback; },
initial: { total_feedback: 0, positive_feedback: 0, feedback: 0 }
})
但我需要这些项目,所以我必须在Mongoose中进行,因为Mongo不知道关系。
在SQL中这很容易,但我对NoSQL并不擅长。这样的事情可能吗?