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

MongoDB에서 여러 속성을 비교하는 방법: $where 연산자 활용 가이드

MongoDB에서 여러 속성 비교하기

MongoDB에서 여러 속성(필드)을 서로 비교하려면 $where 연산자를 사용하면 됩니다. 이 연산자는 JavaScript 표현식을 기반으로 조건을 평가하며, 배열 요소 간의 비교에도 유용하게 활용됩니다.

먼저 예제에 사용할 문서가 포함된 컬렉션을 생성해 보겠습니다.

> db.comparingMultiplePropertiesDemo.insertOne({"Values":[10,70,60]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cf228fcb64a577be5a2bc0a")
}

find() 메서드를 사용하여 컬렉션의 모든 문서를 조회하는 쿼리는 다음과 같습니다.

> db.comparingMultiplePropertiesDemo.find().pretty();

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

{
   "_id" : ObjectId("5cf228fcb64a577be5a2bc0a"),
   "Values" : [
      10,
      70,
      60
   ]
}

Case 1: 조건이 참(True)인 경우

$where 조건이 참으로 평가되면 해당 문서의 배열이 그대로 출력되고, 거짓이라면 아무 결과도 표시되지 않습니다. 다음은 Values 배열의 두 번째 요소와 세 번째 요소를 비교하는 쿼리입니다.

> db.comparingMultiplePropertiesDemo.find({ $where : "this.Values[1] > this.Values[2]" });

배열 인덱스 기준으로 Values[1]은 70, Values[2]는 60입니다. 70 > 60이 참이므로 다음과 같은 문서가 정상적으로 출력됩니다.

{ "_id" : ObjectId("5cf228fcb64a577be5a2bc0a"), "Values" : [ 10, 70, 60 ] }

Case 2: 조건이 거짓(False)인 경우

반대로 조건이 거짓으로 평가되면 아무런 데이터도 표시되지 않습니다. 이번에는 부등호 방향을 반대로 바꾼 쿼리를 실행해 보겠습니다.

> db.comparingMultiplePropertiesDemo.find({ $where : "this.Values[1] < this.Values[2]" });

70 < 60은 거짓이기 때문에, 위 쿼리의 실행 결과로는 어떠한 문서도 반환되지 않습니다.

참고 사항

$where 연산자는 JavaScript를 실행하기 때문에 일반적인 인덱스 기반 쿼리보다 성능이 떨어질 수 있습니다. 따라서 대량의 데이터를 다루는 운영 환경에서는 가능한 한 집계 파이프라인($expr, $cmp 등)을 활용하는 것이 권장됩니다. 다만 배열 내부 요소 간 비교처럼 복잡한 조건이 필요한 경우에는 $where가 여전히 편리한 선택지가 됩니다.