AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

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 복합 조건 활용으로 정확한 필터링 가능
  • 문서 내 배열 요소의 순서, 크기, 범위에 따라 적절한 연산자 선택이 중요