Mongodb - mongoose,通过对两个字段求和来排序

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求助:)

chr*_*dam 9

在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)