MongoDB 배열 필터링 방법
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
MongoDB를 사용하는 개발자, 배열 필터링 기술 필요
난이도: 중급 (JavaScript와 MongoDB 쿼리 문법 비교 이해 필요)
핵심 요약
- JavaScript와 MongoDB 쿼리 문법 비교
- obj => obj.qty < 10
↔ {qty: {$lt: 10}}
- 배열 필터링 주요 연산자
- $all
(값 포함, 순서 무관), $size
(배열 크기), $elemMatch
(요소 조건 일치)
- 복잡 쿼리 예시
- {'tags.1': 'red'}
(인덱스 1에 'red' 존재), {dim_cm: {$gt: 15, $lt: 20}}
(15~20 사이 값 존재)
섹션별 세부 요약
1. 기초 문법 비교
- JavaScript:
filter(queryLessThanTen)
- MongoDB:
find({qty: {$lt: 10}})
- 동일 목적: 배열 내 특정 조건에 해당하는 문서 검색
2. 배열 포함 조건
- 값 포함
- JavaScript: i => i.tags.includes("red")
- MongoDB: {tags: "red"}
- 인덱스 기반 조건
- JavaScript: i => i.tags[1] === "red"
- MongoDB: {'tags.1': "red"}
3. 배열 정확성 조건
- 순서 정확 일치
- JavaScript: i => i.tags.toString() == ["red", "blank"].toString()
- MongoDB: {tags: ["red", "blank"]}
- 부분 집합 일치
- JavaScript: i => i.tags.includes("red") && i.tags.includes("blank")
- MongoDB: {tags: {$all: ["red", "blank"]}}
4. 배열 크기 조건
- JavaScript:
i => i.tags.length == 3
- MongoDB:
{tags: {$size: 3}}
5. 값 범위 조건
- 단일 범위
- JavaScript: i => i.dim_cm.findIndex(d => d > 25) > -1
- MongoDB: {dim_cm: {$gt: 25}}
- 복합 범위
- JavaScript: i => i.dim_cm.findIndex(d => d > 15) > -1 && i.dim_cm.findIndex(d => d < 20) > -1
- MongoDB: {dim_cm: {$gt: 15, $lt: 20}}
6. `$elemMatch` 복합 조건
- JavaScript:
i => i.dim_cm.findIndex(d => d > 22 && d < 30) > -1
- MongoDB:
{dim_cm: {$elemMatch: {$gt: 22, $lt: 30}}}
- 배열 내 모든 요소가 조건에 일치해야 함
7. 조합 쿼리 예시
- 크기 + 포함 조건
- MongoDB: {tags: {$size: 2, $all: ["red", "black"]}}
- 인덱스 + $elemMatch 조건
- MongoDB: {dim_cm: {'dim_cm.0': 26, $elemMatch: {$gt: 22, $lt: 30}}}
결론
- MongoDB 배열 쿼리 시
$all
,$size
,$elemMatch
연산자 사용 권장 - 인덱스 기반 조건(
'tags.1': 'red'
)과$elemMatch
복합 조건 활용으로 정확한 필터링 가능 - 문서 내 배열 요소의 순서, 크기, 범위에 따라 적절한 연산자 선택이 중요