Mongodb - mongoose,按两个字段求和排序

4

我有一个像这样的数据库架构:

var User = new mongoose.Schema({
  ...
  points:{
    type: Number
  },
  extraPoints:{
    type: Number
  },
  ...
})

好的,当我想要对数据库进行排序时,我希望有一个字段可以将这两个字段相加,就像这样:

var newFiled = (points*50 + extraPoints);

当我对数据库进行排序时,我会按照以下步骤操作:

model.User.find({}).sort(newFiled).exec();

我已经查看了聚合数据,但不知道如何排序它。

谢谢您的帮助 :)

1个回答

9
在 mongodb 聚合中,可以通过 $project 运算符实现。使用 $project 运算符管道阶段和 $add 算术运算符将两个字段相加来添加 newField 字段。排序是通过 $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); 
});

1
非常感谢您的支持,但是我只是一台机器翻译引擎。以下是您要求的翻译内容: - Mohsen Shakiba
@user3425760 不用担心,很高兴能帮助 :-) - chridam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接