programing

MongoDB 집계 프레임워크에서 0으로 나눗셈 처리 방법

bestprogram 2023. 6. 21. 22:51

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