728x90
mongo에서 join을 위해 aggregate하는 경우
원하는 값만 얻기위해 $project를 쓰고는 한다.
한걸음 나아가 $project를 응용하여 사용하는법을 알아보고자 한다.
이번에 다소 특수한 경우를 처리해야하는 상황이 발생했다.
예를들어, aggregate한 데이터들 중
...
$project: {
"오늘의 요리사": {
"반찬 담당자": [...], // 10명
"찌개 담당자": [...], // 10명
"밥 담당자": [...], // 3명
...
}
}
...
위와 같은 상황이다. (이는 단지 예시이다)
나의 경우에는 각 데이터들의 개수가 1:1:1로 유지되어야하는데 밥 담당자의 크기가 다른 데이터들과 달라 null값에 대한 처리를 해줘야하는 경우였다.
검색을 해본 결과, 무려 $map이라는 기능이 있음을 발견했다. 친숙한 키워드가 나타나자 너무 행복했다.
...
$project: {
"오늘의 요리사": {
"반찬 담당자": "오늘의 요리사.반찬 담당자",
"찌개 담당자": "오늘의 요리사.찌개 담당자,
"밥 담당자": {
$map: {
$input: "오늘의 요리사",
as: "e",
in: {
$cond: {
if: { $eq: [ "$$e.밥 담당자", null ] },
then: { "밥 담당자": "-" },
else: { "밥 담당자": "$$e.밥 담당자" }
}
}
}
},
...
}
}
...
위와 같이 조건식을 적용하여 해결할 수 있었다.
예시가 다소 이상하여 언제쓰는건지 헷갈릴수 있으나,
이런식의 array타입에 대한 조건식은 분명히 많이쓰일것으로 생각되어 정리해본다.
728x90
반응형
'개발, 코딩 > RDB|SQL|NoSQL' 카테고리의 다른 글
mongodb, how to check empty array field ? (0) | 2020.06.18 |
---|---|
[Mongo, 안정적 시스템 구축] step1 - 백업 (0) | 2020.04.28 |
$text - mongo (0) | 2020.04.07 |
Mongodb, array내 object의 value는 어떻게 바꿀까? (0) | 2020.02.07 |
react-native, webview 마스터 (0) | 2019.11.19 |