MongoDB에서 $or 연산자는 여러 조건 중 하나라도 일치하는 문서를 조회할 때 사용하는 논리 연산자입니다. SQL의 WHERE 절에 있는 OR 조건과 유사한 역할을 하며, 조건들을 배열 형태로 전달받아 처리합니다.
$or 쿼리 기본 문법
$or 쿼리의 기본적인 작성 방식은 다음과 같습니다.
db.yourCollectionName.find({ $or : [ { "yourFieldName" : "yourValue1" }, { "yourFieldName" : "yourValue2" }, ...N ] }).pretty();$or 키워드 뒤에 대괄호([])로 감싼 조건 배열을 넣고, 각 조건은 중괄호({})로 묶어 쉼표로 구분합니다. 이렇게 하면 배열 안의 조건 중 어느 하나라도 참인 모든 문서가 결과로 반환됩니다.
예제용 컬렉션 생성하기
개념을 제대로 이해하기 위해 먼저 샘플 문서들이 들어 있는 컬렉션을 만들어 보겠습니다. 아래 쿼리를 실행하면 'orDemo' 컬렉션에 사용자 정보가 차례대로 삽입됩니다.
> db.orDemo.insertOne({"UserName":"Larry","UserAge":23});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9491fd4cf1f7a64fa4df4c")
}
> db.orDemo.insertOne({"UserName":"David","UserAge":21});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9492074cf1f7a64fa4df4d")
}
> db.orDemo.insertOne({"UserName":"Mike","UserAge":25});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c94920e4cf1f7a64fa4df4e")
}
> db.orDemo.insertOne({"UserName":"Sam","UserAge":20});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9492144cf1f7a64fa4df4f")
}
> db.orDemo.insertOne({"UserName":"Carol","UserAge":24});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c94921d4cf1f7a64fa4df50")
}
> db.orDemo.insertOne({"UserName":"Bob","UserAge":22});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c94922c4cf1f7a64fa4df51")
}저장된 전체 문서 확인하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 조회할 수 있습니다. pretty() 메서드를 함께 사용하면 결과가 보기 좋게 정렬되어 출력됩니다.
> db.orDemo.find().pretty();
실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5c9491fd4cf1f7a64fa4df4c"),
"UserName" : "Larry",
"UserAge" : 23
}
{
"_id" : ObjectId("5c9492074cf1f7a64fa4df4d"),
"UserName" : "David",
"UserAge" : 21
}
{
"_id" : ObjectId("5c94920e4cf1f7a64fa4df4e"),
"UserName" : "Mike",
"UserAge" : 25
}
{
"_id" : ObjectId("5c9492144cf1f7a64fa4df4f"),
"UserName" : "Sam",
"UserAge" : 20
}
{
"_id" : ObjectId("5c94921d4cf1f7a64fa4df50"),
"UserName" : "Carol",
"UserAge" : 24
}
{
"_id" : ObjectId("5c94922c4cf1f7a64fa4df51"),
"UserName" : "Bob",
"UserAge" : 22
}$or 연산자 실전 예제
이제 $or 연산자를 활용해 UserName이 'Carol'이거나 'Larry'인 문서만 조회해 보겠습니다. 쿼리는 다음과 같이 작성합니다.
> db.orDemo.find({ $or : [ { "UserName" : "Carol" }, { "UserName" : "Larry" } ] }).pretty();위 쿼리를 실행하면 두 조건 중 하나라도 만족하는 문서만 반환됩니다.
{
"_id" : ObjectId("5c9491fd4cf1f7a64fa4df4c"),
"UserName" : "Larry",
"UserAge" : 23
}
{
"_id" : ObjectId("5c94921d4cf1f7a64fa4df50"),
"UserName" : "Carol",
"UserAge" : 24
}정리
결과를 보면 전체 6개 문서 중 'Larry'와 'Carol'에 해당하는 2개 문서만 출력된 것을 확인할 수 있습니다. 이처럼 $or 연산자를 사용하면 서로 다른 여러 조건을 OR 논리로 결합해 원하는 데이터를 유연하게 필터링할 수 있습니다. 또한 각 조건에는 같은 필드뿐 아니라 서로 다른 필드를 섞어서 지정할 수도 있으므로, 복잡한 검색 조건을 구성할 때 매우 유용합니다.