Mongodb - 猫鼬,通过对两个字段求和进行排序

Posted

技术标签:

【中文标题】Mongodb - 猫鼬,通过对两个字段求和进行排序【英文标题】:Mongodb - mongoose, sort by summing two fields 【发布时间】:2015-07-12 02:23:19 【问题描述】:

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

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

好的,当我想对数据库进行排序时,我想要一个将两个字段相加的文件,如下所示:

var newFiled = (points*50 + extraPoints);

所以当我对数据库进行排序时,我会这样做:

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

我已经检查了汇总,但我不知道汇总后如何对其进行排序。 感谢您的帮助:)

【问题讨论】:

【参考方案1】:

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

【讨论】:

感谢 looooot :) 我希望我能投票给你两次。 @user3425760 不用担心,很乐意提供帮助:-)

以上是关于Mongodb - 猫鼬,通过对两个字段求和进行排序的主要内容,如果未能解决你的问题,请参考以下文章

Mongodb对来自聚合方面的两个相似数据数组进行分组和求和

如何对 MongoDB 集合中字段的不同值求和(利用 mongoose)

MongoDB distinct() 指定字段去重

使用猫鼬对先前存在的mongoDB Atlas集合进行查询

Mongodb,猫鼬,Schema 结构。将一个集合放入其他集合的字段中

如何在猫鼬中进行原始 mongodb 操作?