Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb-mongoose,通过两个字段求和进行排序_Mongodb_Sorting_Mongoose_Mongodb Query_Aggregation Framework - Fatal编程技术网

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不用担心,很乐意帮忙:-)