MongoDB에서 특정 값과 일치하는 문서를 조회할 때 일반적으로 $eq 연산자를 사용하지만, 사실 이 연산자를 명시하지 않고도 동일한 결과를 얻을 수 있습니다. 이 글에서는 $eq 연산자 없이 동등 조건 쿼리를 작성하는 방법을 단계별로 살펴보겠습니다.
1. 컬렉션 생성 및 문서 삽입
먼저 insertOne() 메서드를 사용하여 문서가 포함된 컬렉션을 생성합니다.
> db.operatorDemo.insertOne({"StudentSubject":["MongoDB","MySQL","Java"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cef94eaef71edecf6a1f6a2")
}
> db.operatorDemo.insertOne({"StudentSubject":["Java","C","C++"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cef94faef71edecf6a1f6a3")
}위 예제에서는 operatorDemo라는 컬렉션에 학생 과목 정보를 담은 두 개의 문서를 삽입했습니다. 각 문서는 StudentSubject 필드에 배열 형태로 과목 목록을 저장하고 있습니다.
2. find() 메서드로 전체 문서 확인
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 조회할 수 있습니다. pretty() 메서드를 함께 사용하면 결과를 보기 좋게 정렬하여 출력합니다.
> db.operatorDemo.find().pretty();
출력 결과
{
"_id" : ObjectId("5cef94eaef71edecf6a1f6a2"),
"StudentSubject" : [
"MongoDB",
"MySQL",
"Java"
]
}
{
"_id" : ObjectId("5cef94faef71edecf6a1f6a3"),
"StudentSubject" : [
"Java",
"C",
"C++"
]
}3. $eq 연산자 없이 동등 조건 쿼리 작성
MongoDB에서는 필드 이름과 값을 콜론(:)으로 연결하기만 해도 자동으로 동등 비교가 수행됩니다. 즉, { field: { $eq: value } } 대신 { field: value } 형태로 작성하면 됩니다.
다음은 $eq 연산자를 사용하지 않고 StudentSubject 필드에서 "MongoDB"와 일치하는 문서를 조회하는 쿼리입니다.
> db.operatorDemo.find({StudentSubject:"MongoDB"});출력 결과
{ "_id" : ObjectId("5cef94eaef71edecf6a1f6a2"), "StudentSubject" : [ "MongoDB", "MySQL", "Java" ] }정리
MongoDB는 쿼리 조건에 단순히 값을 지정하면 내부적으로 $eq 연산자를 적용하기 때문에, 명시적으로 작성하지 않아도 동일한 동등 조건 검색이 가능합니다. 또한 위 예제처럼 필드가 배열인 경우에도 배열 요소 중 하나라도 조건과 일치하면 해당 문서가 반환됩니다. 코드를 더 간결하게 유지하고 싶다면 $eq를 생략한 축약형 쿼리를 활용해 보세요.