Mongodb-mongoose,通过两个字段求和进行排序
我有这样一个数据库模式:Mongodb-mongoose,通过两个字段求和进行排序,mongodb,sorting,mongoose,mongodb-query,aggregation-framework,Mongodb,Sorting,Mongoose,Mongodb Query,Aggregation Framework,我有这样一个数据库模式: var User = new mongoose.Schema({ ... points:{ type: Number }, extraPoints:{ type: Number }, ... }) var newFiled = (points*50 + extraPoints); model.User.find({}).sort(newFiled).exec(); 好的,当我要对数据库进行排序时,我希望有一个字段,将两个字段
var User = new mongoose.Schema({
...
points:{
type: Number
},
extraPoints:{
type: Number
},
...
})
var newFiled = (points*50 + extraPoints);
model.User.find({}).sort(newFiled).exec();
好的,当我要对数据库进行排序时,我希望有一个字段,将两个字段相加,如下所示:
var User = new mongoose.Schema({
...
points:{
type: Number
},
extraPoints:{
type: Number
},
...
})
var newFiled = (points*50 + extraPoints);
model.User.find({}).sort(newFiled).exec();
因此,当我对数据库进行排序时,我会这样做:
var User = new mongoose.Schema({
...
points:{
type: Number
},
extraPoints:{
type: Number
},
...
})
var newFiled = (points*50 + extraPoints);
model.User.find({}).sort(newFiled).exec();
我已签出聚合,但不知道聚合时如何排序。Thanx帮助:)在mongodb聚合中,这可以通过操作员实现。
newField
是通过操作符管道阶段添加的,算术操作符将两个字段相加。排序通过管道步骤完成:
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);
});
谢谢一个笨蛋:)我希望我能投你两次票。@user3425760不用担心,很乐意帮忙:-)