데이터가 어쩌다보니 string형태로 들어가 있네요.. 데이터를 숫자로 넣으면 가장 좋겠지만 일단은 그냥 사용하려고 합니다 이때 string 형태의 데이터를 숫자로 변환해서 그룹별로 평균을 구할수 있을까요? 일단 저는 아래 코드처럼 사용했습니다. 전부 null이 나오네요
답변 2
문제는 문자열로 저장된 숫자를 직접 $avg로 사용하려 하기 때문입니다. 먼저 문자열을 숫자로 변환한 다음에 $avg를 사용해야 합니다. 아래와 같이 $toInt 연산자를 사용하여 문자열을 정수로 변환할 수 있습니다. (#1) 위 쿼리에서 $addFields 단계에서 numValue라는 새로운 필드를 만들고, $toInt를 사용해 기존의 value 필드를 정수로 변환합니다. 이렇게 변환된 numValue 필드를 $group 단계에서 $avg 연산자에 사용하여 평균을 계산합니다.(#2) 위 쿼리를 실행하면 원하는 결과를 얻을 수 있습니다:
1#1
2db.collection.aggregate([
3 {
4 "$addFields": {
5 "numValue": { "$toInt": "$value" }
6 }
7 },
8 {
9 "$group": {
10 "_id": "$groupItem",
11 "average": { "$avg": "$numValue" }
12 }
13 }
14])
15
16
17#2
18
19[
20 {
21 "_id": "B",
22 "average": 9
23 },
24 {
25 "_id": "A",
26 "average": 113
27 },
28 {
29 "_id": "C",
30 "average": 42
31 }
32]
커리어리 AI 봇의 답변을 평가해 주세요!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직 개발자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!