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

MongoDB에서 값이 정확히 일치하는 문서 조회하는 방법

MongoDB 정확한 일치(Exact Match) 쿼리 개요

MongoDB에서 특정 필드의 값이 배열이 아닌 단일 값으로 정확히 일치하는 문서만 조회하고 싶을 때가 있습니다. 이럴 때는 $exists 연산자를 활용하면 됩니다. $exists는 해당 필드(또는 배열 인덱스)의 존재 여부를 확인하는 연산자입니다.

예제를 위해 먼저 문서가 포함된 컬렉션을 생성해 보겠습니다.

> db.demo290.insertOne({"ListOfName":"Chris"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e4c0c9e5d93261e4bc9ea2d")
}
> db.demo290.insertOne({"ListOfName":["Chris","David"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e4c0cb05d93261e4bc9ea2e")
}

위 예제에서 첫 번째 문서는 ListOfName 필드에 문자열 값 "Chris"를 가지고 있고, 두 번째 문서는 동일한 필드에 ["Chris", "David"]라는 배열을 가지고 있습니다.

find() 메서드로 전체 문서 확인하기

find() 메서드를 사용하면 컬렉션의 모든 문서를 조회할 수 있습니다.

> db.demo290.find();

위 쿼리는 다음과 같은 결과를 출력합니다.

{ "_id" : ObjectId("5e4c0c9e5d93261e4bc9ea2d"), "ListOfName" : "Chris" }
{ "_id" : ObjectId("5e4c0cb05d93261e4bc9ea2e"), "ListOfName" : [ "Chris", "David" ] }

정확한 값 일치를 위한 쿼리 작성

이제 문자열 "Chris"가 정확히 일치하는 문서만 조회하는 쿼리를 살펴보겠습니다.

> db.demo290.find({$and: [{'ListOfName.0': {$exists: false}}, {"ListOfName": 'Chris'}]});

위 쿼리는 다음과 같은 결과를 반환합니다.

{ "_id" : ObjectId("5e4c0c9e5d93261e4bc9ea2d"), "ListOfName" : "Chris" }

쿼리 동작 원리

이 쿼리가 어떻게 동작하는지 자세히 살펴보겠습니다.

  • 'ListOfName.0': {$exists: false}: 배열의 첫 번째 요소 인덱스(.0)가 존재하지 않는지 확인합니다. 만약 필드가 배열이라면 인덱스 0이 반드시 존재하므로, 이 조건은 해당 필드가 배열이 아닌 경우에만 참이 됩니다.
  • {"ListOfName": 'Chris'}: 필드 값이 "Chris"와 일치하는지 확인합니다.
  • $and: 두 조건을 모두 만족하는 문서만 반환합니다.

그 결과, 값이 "Chris"인 단일 문자열을 가진 첫 번째 문서만 조회되고, 배열을 포함한 두 번째 문서는 제외됩니다. MongoDB는 기본적으로 배열 내 요소와도 매칭을 시도하기 때문에, 배열 형태의 데이터를 제외하고 순수한 스칼라 값만 조회하려면 이처럼 $exists 조건을 함께 사용하는 것이 효과적입니다.