【发布时间】:2016-08-07 22:09:43
【问题描述】:
我有一个场景,我在名为 ratings 的数组中有评级和回合
我需要根据轮数(1,2,3,4)按降序对评级进行排序。
我正在使用 express js 和 mongoose 驱动程序进行查询
查询:
**//Get top ratings based on round
exports.topRating = function(req, res) {
console.log(req.query);
Profiles.aggregate([{
$match: {
"hiringManager": req.query.hiringManager,
"ratings.round":parseInt(req.query.round)
}
},{ $sort : { "ratings.rating" : -1 } }],
function(err, profiles) {
if (err) {
return handleError(res, err);
}
console.log(profiles);
return res.status(200).json(fnStruncturedData(profiles));
});
};
架构:
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var ProfilesSchema = new Schema({
name:String,
ratings: [{
round: Number,
rating: Number,
feedback: String,
interviewer: String,
roundStatus: String
}]
})
假设我将数据存储在 db 中,如下所示
[{
name:"a",
ratings:[{
round: 1,
rating: 3,
feedback: "something",
interviewer: "abc",
roundStatus: "selected"
},
{
round: 2,
rating: 5,
feedback: "something",
interviewer: "abc",
roundStatus: "selected"
},
{
round: 3,
rating: 4,
feedback: "something",
interviewer: "abc",
roundStatus: "selected"
},{
round: 4,
rating: 1,
feedback: "something",
interviewer: "abc",
roundStatus: "selected"
}]
},
{
name:"b",
ratings:[{
round: 1,
rating: 5,
feedback: "something",
interviewer: "abc",
roundStatus: "selected"
},
{
round: 2,
rating: 4,
feedback: "something",
interviewer: "abc",
roundStatus: "selected"
},
{
round: 3,
rating: 3,
feedback: "something",
interviewer: "abc",
roundStatus: "selected"
},{
round: 4,
rating: 2,
feedback: "something",
interviewer: "abc",
roundStatus: "selected"
}]
}]
我在客户端有一个下拉菜单,用户在该下拉菜单中选择回合,因此会出现最高评分。
比如说第一轮:
数据已排序,根据查询,我首先在数组中得到name:bdata
第二轮:
我应该首先在数组中获取name:a,但它再次首先显示name:b 数据
在这里我可以完美地对第 1 轮评分进行排序,而第 (2,3,4) 轮显示没有变化
我不明白查询中有什么问题
请帮忙
【问题讨论】:
-
添加示例数据以及你得到什么和预期什么
-
还是不太清楚。将预期结果和当前结果添加为 json。
-
实际上它显示的是整体的最高评分,而不是圆形的
标签: node.js mongodb express mongoose aggregation-framework