node.js – 如何使用MongoDB中的2个字段的总和进行排序

我有这个文件

{ 
 "_id": "59b804e1ee8a4071a5ea3fcc","description" : "description","imagepath" : "https://example.com","type" : "label","downVotes" : -25,"upVotes" : 15,"language" : "en","approoved" : true
},{ 
 "_id": "59b804e1ee8a4071a5ea4dfd","downVotes" : 0,"upVotes" : 30,"approoved" : true
}

如何通过upVotes&的总和对这两个对象进行排序downVotes值?

(id为59b804e1ee8a4071a5ea4dfd的对象应首先出现,依此类推)

我试图聚合

{"$group" : {
    _id:{upVotes:"$upVotes",downVotes:"$downVotes"},count:{$sum:1}
}}

但它将所有类似的文件分组.我无法弄清楚聚合过程/语法.

编辑:根据Veeram的回答,这里是使用mongoose的工作代码,万一有人掉到这里:

Labels.aggregate([
        {"$addFields":{ "sort_order":{"$add":["$upVotes","$downVotes"]}}},{"$sort":{"sort_order":-1}},{"$project":{"sort_order":0}}
    ]).exec(function (err,labels) {
        if (err) {
            return res.status(404).json({
                error: err
            });
        }
        res.status(200).json(labels);
    });

解决方法

您可以在3.4中尝试以下聚合以进行自定义排序.

使用$add$addFields中的upVotes和downVotes求和,使计算值保持为文档中的额外字段,然后是字段上的$sort sort.

$project,排除放弃排序字段以获得预期输出.

db.col.aggregate([
 {"$addFields":{ "sort_order":{"$add":["$upVotes",{"$project":{"sort_order":0}}
])

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...