MongoDB 집계 프레임워크에서 0으로 나눗셈 처리 방법
저는 업보팅 또는 다운보팅이 가능한 항목 모음을 가지고 있습니다.
{"_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으로 나누기 때문입니다.적절한 조건화를 구현해야 합니다.
upvotes != 0 및 downvotes == 0이면 품질 = upvotes 및 downvotes가 모두 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 연산자를 사용하여 다음을 처리할 수 있습니다.
db.items.aggregate([
{"$project":
{
"name": "$name",
"upvotes": "$upvotes",
"downvotes": "$downvotes",
"quality": { $cond: [ { $eq: [ "$downvotes", 0 ] }, "N/A", {"$divide":["$upvotes", "$downvotes"]} ] }
}
},
{"$sort": {"quality":-1}}
]);
당신은 $cond 연산자를 원합니다.http://docs.mongodb.org/manual/reference/operator/aggregation/cond/
다음과 같은 것:
{"$project":
{
"name": "$name",
"upvotes": "$upvotes",
"downvotes": { $cond: [ { $eq: ["$downvotes", 0] }, 1, "$downvotes"] }
}
},
우리는 사용할 수 있습니다.$cond
무한 값을 관리하는 연산자
{
$addFields: {
averageRating: {
$cond: [
{ $eq: ['$totalReviews', 0] },
0,
{ $divide: ['$totalRatings', '$totalReviews'] }
]
}
}
}
언급URL : https://stackoverflow.com/questions/22841266/how-to-handle-division-by-zero-in-mongodb-aggregation-framework
'programing' 카테고리의 다른 글
SQL에서 두 날짜 사이의 전체 월 수 계산 (0) | 2023.06.26 |
---|---|
기본 바인더가 요청되었지만 'org.springframework.cloud.stream.messaging에 사용할 수 있는 바인더가 없습니다.특성 채널로 직접 연결' (0) | 2023.06.21 |
파이썬에서 반복기를 재설정할 수 있습니까? (0) | 2023.06.21 |
SQL Server 바꾸기, 특정 문자 이후 모두 제거 (0) | 2023.06.21 |
vue.항목의 불변적이고 지속적인 위치. (0) | 2023.06.21 |