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 |