Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB聚合框架中如何处理零除_Mongodb - Fatal编程技术网

MongoDB聚合框架中如何处理零除

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"

我有一个项目的集合,可以向上或向下投票

{"_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}}
]);
显然这不起作用,因为被零除。我需要实施适当的调节:

如果投票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操作符。

比如:

{"$project":
  {
    "name": "$name",
    "upvotes": "$upvotes",
    "downvotes": { $cond: [ { $eq: ["$downvotes", 0] }, 1, "$downvotes"] } 
  }
},
您可能希望使用运算符来处理此问题:

db.items.aggregate([
{“$project”:
{
“名称”:“$name”,
“upvotes”:“$upvotes”,
“否决票”:“$DOWNDOVERS”,
“质量”:{$cond:[{$eq:[“$downvoates”,0]},“不适用”,{“$divide”:[“$upvoates”,“$downvoates”]}
}
},
{“$sort”:{“质量”:-1}
]);
就是这样,我刚把“不适用”改为“不适用”。无论如何,$cond现在是我的朋友了。