这是模式中的相关部分
`
var CandidateSchema = new Schema({
calculateScore:[{
jobname:{type:Schema.ObjectId,ref: 'Job'}
,Score:{type:Number,default:0}
}]
})
`
一个应聘者可以申请多个工作,不同的工作得到不同的分数。我想根据具体工作的分数对候选人进行排序。有什么想法吗?
最佳答案
假设变量 objectId
包含所引用的 Job
的 ObjectId
,您可以聚合记录以获得记录 sorted
通过该特定 Job
的得分。
由于stage操作符$project
不支持$elemeMatch
操作,我们无法直接使用它来获取我们想要的Job子文档并根据它进行排序.
$project
一个名为temp_score
的单独字段
,以包含原始calculateScore
数组的副本。<$redact
来自calculateScore
的其他子文档,而不是其jobname
包含id
我们正在寻找。现在calculateScore
将只包含一个 数组中的元素,即jobname
为id
的元素 我们指定的。- 根据该子文档的得分
排序
降序
中的记录 订单。 - 完成
排序
后,投影我们原来的calculatescore
字段,在temp_score
中。
代码:
var objectId = ObjectId("ObjectId of the referred Job"); // Needs to be fetched
// from the Job collection.
model.aggregate(
{$project:{"temp_score":{"level":{$literal:1},
"calculateScore":"$calculateScore"},
"calculateScore":1}},
{$redact:{$cond:[
{$and:[
{$eq:[{$ifNull:["$jobname",objectId]},objectId]},
{$ne:["$level",1]}
]
},
"$$DESCEND",
{$cond:[{$eq:["$level",1]},
"$$KEEP","$$PRUNE"]}]}},
{$sort:{"calculateScore.Score":-1}},
{$project:{"_id":1,
"calculateScore":"$temp_score.calculateScore"}},
function(err,res)
{
console.log(res);
}
);
关于node.js - 按数组元素(文档)字段排序 - MongoDB/Mongoose,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26987331/