Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 50보다 큰 값 배열 추출하기 – $in과 $gt 연산자 활용법

JSON 형태의 배열 대신 순수한 값 배열을 얻고 싶다면 $in 연산자를 사용하면 됩니다. 또한 "보다 큰(greater than)" 조건을 처리할 때는 MongoDB의 $gt 연산자를 함께 활용합니다.

이번 글에서는 실제 예제를 통해 50보다 큰 값을 가진 문서들을 값 배열 형태로 추출하는 방법을 단계별로 살펴보겠습니다.

1. 샘플 컬렉션 생성하기

먼저 테스트용 컬렉션에 여러 개의 문서를 저장합니다.

> db.demo50.save({"Value":40});
WriteResult({ "nInserted" : 1 })
> db.demo50.save({"Value":100});
WriteResult({ "nInserted" : 1 })
> db.demo50.save({"Value":20});
WriteResult({ "nInserted" : 1 })
> db.demo50.save({"Value":510});
WriteResult({ "nInserted" : 1 })

2. 저장된 문서 전체 조회하기

find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.

> db.demo50.find();

위 명령을 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.

{ "_id" : ObjectId("5e270c02cfb11e5c34d89903"), "Value" : 40 }
{ "_id" : ObjectId("5e270c05cfb11e5c34d89904"), "Value" : 100 }
{ "_id" : ObjectId("5e270c07cfb11e5c34d89905"), "Value" : 20 }
{ "_id" : ObjectId("5e270c11cfb11e5c34d89906"), "Value" : 510 }

3. 50보다 큰 값 배열 추출하기

다음 쿼리는 distinct() 메서드로 조건에 맞는 _id 목록(값 배열)을 먼저 구한 뒤, 이를 $in 연산자와 결합하여 해당 문서들을 조회하는 방식입니다.

> listOfValues = db.demo50.distinct("_id", {Value:{$gt:50}});
[
    ObjectId("5e270c05cfb11e5c34d89904"),
    ObjectId("5e270c11cfb11e5c34d89906")
]
> db.demo50.find({_id:{$in:listOfValues}});

실행 결과는 다음과 같습니다.

{ "_id" : ObjectId("5e270c05cfb11e5c34d89904"), "Value" : 100 }
{ "_id" : ObjectId("5e270c11cfb11e5c34d89906"), "Value" : 510 }

동작 원리 정리

위 쿼리의 핵심 동작 과정은 다음과 같습니다.

  • $gt 연산자: Value 필드의 값이 50보다 큰 문서만 필터링합니다. 예제에서는 100과 510 두 개의 문서가 해당됩니다.
  • distinct() 메서드: 필터링된 문서들의 _id 값을 중복 없이 배열 형태로 반환합니다. 이렇게 하면 JSON 객체 배열이 아닌 순수한 값(ObjectId) 배열을 얻을 수 있습니다.
  • $in 연산자: 앞서 구한 _id 배열을 조건으로 사용하여 일치하는 문서들을 한 번에 조회합니다.

이처럼 distinct()와 $in을 조합하면 원하는 조건에 맞는 값 배열을 손쉽게 추출하고, 그 결과를 기반으로 문서를 다시 조회할 수 있습니다.