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现在是我的朋友了。