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

MongoDB에서 $elemMatch 연산자 없이 배열의 정확한 일치 값을 찾는 방법 ($eq 활용)

MongoDB에서 배열 필드와 정확히 일치(exact match)하는 문서를 조회하고 싶을 때, 반드시 $elemMatch 연산자를 사용해야 하는 것은 아닙니다. 이럴 때 $eq 연산자를 대안으로 활용하면 간단하게 해결할 수 있습니다.

샘플 데이터 생성

$eq 연산자의 동작을 살펴보기 위해, 먼저 문서들이 담긴 컬렉션을 생성해 보겠습니다.

> db.equalDemo.insertOne({_id:1,"StudentFriendNames":["John","Carol","Sam"]});
{ "acknowledged" : true, "insertedId" : 1 }
> db.equalDemo.insertOne({_id:2,"StudentFriendNames":null});
{ "acknowledged" : true, "insertedId" : 2 }
> db.equalDemo.insertOne({_id:3,"StudentFriendNames":["Carol"]});
{ "acknowledged" : true, "insertedId" : 3 }
> db.equalDemo.insertOne({_id:4,"StudentFriendNames":["Sam"]});
{ "acknowledged" : true, "insertedId" : 4 }

컬렉션의 전체 문서 조회하기

다음은 find() 메서드를 사용하여 컬렉션에 저장된 모든 문서를 조회하는 쿼리입니다.

> db.equalDemo.find();

쿼리를 실행하면 아래와 같은 결과가 출력됩니다.

{ "_id" : 1, "StudentFriendNames" : [ "John", "Carol", "Sam" ] }
{ "_id" : 2, "StudentFriendNames" : null }
{ "_id" : 3, "StudentFriendNames" : [ "Carol" ] }
{ "_id" : 4, "StudentFriendNames" : [ "Sam" ] }

$eq 연산자로 정확한 일치 조회하기

다음은 $eq 연산자를 사용하여 ["Carol"]과 정확히 일치하는 문서만 조회하는 쿼리입니다.

> db.equalDemo.find({"StudentFriendNames":{$eq:["Carol"]}});

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

{ "_id" : 3, "StudentFriendNames" : [ "Carol" ] }

_id가 3인 문서만 반환된 것을 확인할 수 있습니다.

주의할 점

단순히 {"StudentFriendNames": "Carol"}과 같이 쿼리하면 배열 내 요소 중 하나라도 "Carol"을 포함하는 모든 문서(예: _id가 1인 문서)가 반환됩니다. 반면 $eq 연산자에 배열을 지정하면 요소의 개수와 순서까지 포함해 배열 전체가 완전히 동일한 경우에만 매칭됩니다. 따라서 배열의 부분 일치가 아닌, 배열 구조 자체의 정확한 일치를 원할 때 $eq를 활용하는 것이 좋습니다.