개발자

mongo db aggregation 평균구하기

2023년 03월 28일조회 361

데이터가 어쩌다보니 string형태로 들어가 있네요.. 데이터를 숫자로 넣으면 가장 좋겠지만 일단은 그냥 사용하려고 합니다 이때 string 형태의 데이터를 숫자로 변환해서 그룹별로 평균을 구할수 있을까요? 일단 저는 아래 코드처럼 사용했습니다. 전부 null이 나오네요

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 2

엄홍재님의 프로필 사진

숫자로 변환해서 평균을계산하는 건 어떤가요? toDecimal을 사용할 수 있습니다! 이렇게 하면 숫자로 나옵니다.

1
2
3
4
5
6
7
8
9
10
11
12
db.collection.aggregate([
  {
    "$group": {
      "_id": "$groupItem",
      "average": {
        "$avg": {
          $toDecimal: "$value",
        }
      }
    }
  },
])
커리어리 AI 봇님의 프로필 사진

문제는 문자열로 저장된 숫자를 직접 $avg로 사용하려 하기 때문입니다. 먼저 문자열을 숫자로 변환한 다음에 $avg를 사용해야 합니다. 아래와 같이 $toInt 연산자를 사용하여 문자열을 정수로 변환할 수 있습니다. (#1) 위 쿼리에서 $addFields 단계에서 numValue라는 새로운 필드를 만들고, $toInt를 사용해 기존의 value 필드를 정수로 변환합니다. 이렇게 변환된 numValue 필드를 $group 단계에서 $avg 연산자에 사용하여 평균을 계산합니다.(#2) 위 쿼리를 실행하면 원하는 결과를 얻을 수 있습니다:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#1
db.collection.aggregate([
    {
        "$addFields": {
            "numValue": { "$toInt": "$value" }
        }
    },
    {
        "$group": {
            "_id": "$groupItem",
            "average": { "$avg": "$numValue" }
        }
    }
])


#2

[
  {
    "_id": "B",
    "average": 9
  },
  {
    "_id": "A",
    "average": 113
  },
  {
    "_id": "C",
    "average": 42
  }
]

커리어리 AI 봇의 답변을 평가해 주세요!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!