我有这个猫鼬模型:
var juomaSchema = new mongoose.Schema({
...
valikoima: String,
img: String,
views: {default: 0, type: Number},
rating: [],
...
});
juomaSchema.methods.getAvarageRating = function() {
if (this.rating.length !== 0) {
var totalScore = 0;
this.rating.forEach(function(drinkRating) {
totalScore += drinkRating
});
return totalScore/this.rating.length;
} else {
return 0;
}
};
我的问题是,我需要按评级字段的avarage评级对查询进行排序。 我已经在模型中使用了该方法,但我似乎无法在排序查询中使用函数。
我的排序:
router.get("/oluet", function(req, res) {
var perPage = 20,
page = req.query.page,
sortBy = req.query.sort,
asc = req.query.asc;
var sort = {[sortBy] : asc};
console.log(sort);
if(req.xhr) {
//Sanitazes input
const regex = new RegExp(escapeRegExp(req.query.search), "gi");
Juoma.find({nimi: regex, tyyppi: "oluet"})
.sort(sort)
.limit(perPage)
.skip(perPage * page)
.exec(function(err, drinks) {
我该怎么做?制作两个字段:totalRating和timesRates,并做一些聚合魔术?
答案 0 :(得分:0)
Felix在
的评论中解决了这个问题{
$project: {
avg: {$avg: "$rating"}
}
}