mongodb - 如何在 MongoDB 聚合框架中处理除以零

标签 mongodb

我有一组可以被赞成或反对的项目。

{"_id" : 1, "name": "foo", "upvotes" : 30, "downvotes" : 10}
{"_id" : 2, "name": "bar", "upvotes" : 20, "downvotes" : 0}
{"_id" : 3, "name": "baz", "upvotes" : 0,  "downvotes" : 0}

我想使用聚合来计算质量

db.items.aggregate([
    {"$project":
        {
            "name": "$name",
            "upvotes": "$upvotes"
            "downvotes": "$downvotes",
            "quality": {"$divide":["$upvotes", "$downvotes"]}
        }
    },
    {"$sort": {"quality":-1}}
]);

显然这不起作用,因为除以零。我需要实现适当的调节:

如果 upvotes != 0 和 downvotes == 0 那么质量 = upvotes 如果赞成票和反对票均为 0,则质量为 0

我尝试使用三元成语将反对票减 1。但无济于事。

db.items.aggregate([
    {"$project":
        {
            "name": "$name",
            "upvotes": "$upvotes",
            "downvotes": "$downvotes" ? "$downvotes": 1
        }
    },
    {"$project":
        {
            "name": "$name",
            "upvotes": "$upvotes"
            "downvotes": "$downvotes",
            "quality": {"$divide":["$upvotes", "$downvotes"]}
        }
    },
    {"$sort": {"quality":-1}}
]);

如何在 mongodb 聚合框架中集成这种调节?

最佳答案

您可能想使用 $cond运算符(operator)来处理这个:

db.items.aggregate([
    {"$project":
        {
            "name": "$name",
            "upvotes": "$upvotes",
            "downvotes": "$downvotes",
            "quality": { $cond: [ { $eq: [ "$downvotes", 0 ] }, "N/A", {"$divide":["$upvotes", "$downvotes"]} ] }
        }
    },
    {"$sort": {"quality":-1}}
]);

关于mongodb - 如何在 MongoDB 聚合框架中处理除以零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22841266/

相关文章:

mongodb - 仅当当前不存在时才在 mongoose 中创建多个文档

c - C 上的 libmongoc-1.0.pc/MongoDB 出现问题

mongodb - 具有嵌入式关联的深度克隆文档

mongodb 区别 remove() vs findOneAndDelete() vs deleteOne()

c# - 无法在 MongoDB C# 驱动程序中执行多个组

mongodb - 在查询 : > 中发现未知运算符

javascript - Mongoose:递归迭代以更新树状结构中的属性

c - 不按字母顺序更新 MongoDB 中的文档

javascript - Mongo/Meteor 游标更新事件

node.js - Node JS mongoose 查询不产生结果