Moh*_*iba 4 sorting mongoose mongodb mongodb-query aggregation-framework
我有这样的数据库模式:
var User = new mongoose.Schema({
...
points:{
type: Number
},
extraPoints:{
type: Number
},
...
})
Run Code Online (Sandbox Code Playgroud)
好吧,当我想对数据库进行排序时,我希望有一个字段可以对这两个字段进行求和:
var newFiled = (points*50 + extraPoints);
Run Code Online (Sandbox Code Playgroud)
所以当我对数据库进行排序时,我会做这样的事情:
model.User.find({}).sort(newFiled).exec();
Run Code Online (Sandbox Code Playgroud)
我已经检查了聚合但我不知道如何在聚合时对其进行排序.
Thanx求助:)
在mongodb聚合中,这可以通过$project
运营商实现.在newField
通过加入$project
与操作流水线级$add
算术运算器,其增加了两个字段.排序是通过$sort
管道步骤完成的:
var pipeline = [
{
"$project": {
"points": 1,
"extraPoints": 1,
"newField": { "$add": [ "$points", "$extraPoints" ] }
},
{
"$sort": { "newField": 1 }
}
];
model.User.aggregate(pipeline, function (err, res) {
if (err) return handleError(err);
console.log(res);
});
// Or use the aggregation pipeline builder.
model.User.aggregate()
.project({
"points": 1,
"extraPoints": 1,
"newField": { "$add": [ "$points", "$extraPoints" ] }
})
.sort("newField")
.exec(function (err, res) {
if (err) return handleError(err);
console.log(res);
});
Run Code Online (Sandbox Code Playgroud)