728x90
몽고DB에서 어떤 Array 필드에 아무런 값도 존재하지 않는 경우에는 필터링하는 방법에 대해 알아보겠습니다.
일반적으로 필드에 값이 존재하는지 판단할때는 $exists를 사용합니다.
...,
{
$match: {
name: { $exists: true }
}
},
...
이와 같이 아주 간단히 처리할수 있습니다.
그치만, 필드 타입이 Array인 경우 또 다른 조치를 취해주어야합니다.
빈 값이라도 []가 들어가있다면 true로 인식하기 때문입니다.
따라서, 다음과 같이 처리할수 있습니다.
// 첫번째 방법
...,
{
$match: {
foods: {
$exists: true,
$ne: []
}
},
},
...
// 두번째 방법
...,
{
$match: {
foods: {
$exists: true,
$not: { $size: 0 }
}
},
},
...
두 방법다 유효하며, 저는 두번째 방법을 즐겨씁니다.
두 방법의 연산속도의 차이나 이런 부분에 대해서는 아직 잘 모르지만,
일반적으로 단순값을 통한 비교(여기서는 [] )보다는 아래와 같은 방식이 더 정확하다고 생각하기 때문입니다.
728x90
반응형
'개발, 코딩 > RDB|SQL|NoSQL' 카테고리의 다른 글
mongo - $pull (0) | 2021.01.06 |
---|---|
Mongo/Nodejs, connect to remote DB (0) | 2020.09.17 |
[Mongo, 안정적 시스템 구축] step1 - 백업 (0) | 2020.04.28 |
Mongo, $project에서 array타입 null체크하여 처리하기 (0) | 2020.04.21 |
$text - mongo (0) | 2020.04.07 |