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

MongoDB에서 여러 속성을 비교하는 방법 완벽 가이드

MongoDB에서 여러 속성을 비교하는 방법

MongoDB에서 여러 속성(필드)을 서로 비교해야 하는 경우가 종종 있습니다. 예를 들어 배열 내의 두 요소 값을 비교하거나, 문서 내 서로 다른 필드 간의 크기를 비교하고 싶을 때가 그렇습니다. 이럴 때 $where 연산자를 사용하면 JavaScript 표현식을 활용해 원하는 조건의 문서를 조회할 수 있습니다.

이번 글에서는 $where 연산자를 사용하여 MongoDB에서 여러 속성을 비교하는 방법을 단계별로 살펴보겠습니다.

1. 샘플 컬렉션 생성 및 문서 삽입

먼저 데모용 컬렉션을 만들고 문서를 삽입합니다. 아래 예제에서는 Scores라는 배열 필드에 두 개의 점수를 저장했습니다.

> db.demo223.insertOne({"Scores":[56,78]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e3ee4ca03d395bdc2134730")
}
> db.demo223.insertOne({"Scores":[88,45]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e3ee4d103d395bdc2134731")
}
> db.demo223.insertOne({"Scores":[98,79]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e3ee4d803d395bdc2134732")
}

2. find() 메서드로 전체 문서 확인

삽입된 모든 문서를 find() 메서드로 조회해 보겠습니다.

> db.demo223.find();

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : ObjectId("5e3ee4ca03d395bdc2134730"), "Scores" : [ 56, 78 ] }
{ "_id" : ObjectId("5e3ee4d103d395bdc2134731"), "Scores" : [ 88, 45 ] }
{ "_id" : ObjectId("5e3ee4d803d395bdc2134732"), "Scores" : [ 98, 79 ] }

3. $where 연산자로 여러 속성 비교하기

이제 핵심인 $where 연산자를 사용한 쿼리입니다. 아래 쿼리는 배열의 첫 번째 요소(Scores[0])가 두 번째 요소(Scores[1])보다 큰 문서만 조회합니다.

> db.demo223.find({ $where : "this.Scores[0] > this.Scores[1]" });

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

{ "_id" : ObjectId("5e3ee4d103d395bdc2134731"), "Scores" : [ 88, 45 ] }
{ "_id" : ObjectId("5e3ee4d803d395bdc2134732"), "Scores" : [ 98, 79 ] }

결과를 보면 첫 번째 점수가 두 번째 점수보다 큰 두 개의 문서만 반환된 것을 확인할 수 있습니다. 반면 [56, 78]처럼 첫 번째 값이 더 작은 문서는 조건에 해당하지 않아 제외되었습니다.

참고 사항

$where 연산자는 강력하지만 몇 가지 주의할 점이 있습니다. $where는 각 문서마다 JavaScript를 실행하기 때문에 일반 인덱스 기반 쿼리보다 성능이 떨어질 수 있습니다. 따라서 대량의 데이터를 다루는 운영 환경에서는 가능한 한 집계 파이프라인의 $expr 연산자나 $gt, $lt 같은 표준 비교 연산자를 우선적으로 고려하는 것이 좋습니다. $where는 표준 쿼리 연산자로 표현하기 어려운 복잡한 조건을 처리할 때 유용하게 활용할 수 있습니다.