微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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}}
])

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐