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

MongoDB 조건 객체에서 두 개의 외부 값 동일 여부 테스트하는 방법

MongoDB에서 값의 타입을 테스트하려면 $type 연산자를 활용할 수 있습니다. 이 글에서는 $type 연산자와 자바스크립트의 삼항 비교 결과를 조합하여, 두 개의 외부 변수 값이 서로 같은지 확인하는 방법을 단계별로 살펴보겠습니다.

1. 샘플 컬렉션 생성하기

먼저 문서가 포함된 컬렉션을 생성해 보겠습니다. insertOne() 메서드를 사용하여 두 개의 문서를 삽입합니다.

> db.demo211.insertOne({id:101,"Name":"Chris"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e3e298203d395bdc21346fa")
}
> db.demo211.insertOne({id:102,"Name":null});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e3e2a5403d395bdc21346fb")
}

2. 컬렉션의 모든 문서 조회하기

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

> db.demo211.find();

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

{ "_id" : ObjectId("5e3e298203d395bdc21346fa"), "id" : 101, "Name" : "Chris" }
{ "_id" : ObjectId("5e3e2a5403d395bdc21346fb"), "id" : 102, "Name" : null }

3. 두 외부 값의 동일 여부 테스트하기

이제 MongoDB 조건 객체 안에서 두 개의 외부 값이 같은지 테스트하는 쿼리를 살펴보겠습니다. 핵심 아이디어는 자바스크립트의 엄격한 동등 비교(===) 결과를 활용하는 것입니다. v1 === v2가 참이면 true(숫자로 변환 시 1), 거짓이면 false(0)가 되며, 이 값을 $type 연산자의 인자로 사용합니다.

> v1=200;
200
> v2=200;
200
> db.demo211.find({Name : 'Chris', Name : { $type : 1 + (v1 === v2) }});

v1과 v2는 모두 200으로 동일하므로, (v1 === v2)는 true가 되고 이는 숫자 1로 평가됩니다. 따라서 $type 값은 1 + 1 = 2가 되어 문자열(string) 타입을 의미하게 됩니다. 그 결과 Name 필드가 문자열인 문서만 조회됩니다.

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

{ "_id" : ObjectId("5e3e298203d395bdc21346fa"), "id" : 101, "Name" : "Chris" }

정리

이 기법은 MongoDB 셸의 자바스크립트 환경을 활용하여, 외부 변수 간의 비교 결과를 쿼리 조건에 동적으로 반영하는 방법을 보여줍니다. $type 연산자는 BSON 타입 번호를 기준으로 필드를 필터링하므로, 비교 결과(true/false → 1/0)를 숫자 연산에 결합하면 원하는 타입 조건을 유연하게 구성할 수 있습니다. 다만 실무에서는 가독성을 위해 $expr 연산자나 애플리케이션 레벨에서의 사전 검증을 함께 고려하는 것이 좋습니다.