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

MongoDB에서 동일한 키에 여러 OR 조건을 적용하는 방법

MongoDB $or 연산자로 동일한 키에 대한 다중 조건 처리하기

MongoDB에서 하나의 필드(키)에 대해 여러 개의 OR 조건을 적용해야 하는 경우가 있습니다. 이때 $or 연산자를 한 번만 사용하면 간단하게 해결할 수 있습니다. $or 배열 안에 동일한 키를 가진 여러 조건 객체를 나열하면 됩니다.

실제 예제를 통해 살펴보겠습니다. 먼저 문서들을 포함하는 컬렉션을 생성합니다.

> db.demo551.insertOne({"Name":"John"});{
   "acknowledged" : true, "insertedId" : ObjectId("5e8e36d39e5f92834d7f05e5")
}
> db.demo551.insertOne({"Name":"Chris Brown"});{
   "acknowledged" : true, "insertedId" : ObjectId("5e8e36d89e5f92834d7f05e6")
}
> db.demo551.insertOne({"Name":"John Doe"});{
   "acknowledged" : true, "insertedId" : ObjectId("5e8e36de9e5f92834d7f05e7")
}
> db.demo551.insertOne({"Name":"John Smith"});{
   "acknowledged" : true, "insertedId" : ObjectId("5e8e36e59e5f92834d7f05e8")
}
> db.demo551.insertOne({"Name":"Carol"});{
   "acknowledged" : true, "insertedId" : ObjectId("5e8e36ec9e5f92834d7f05e9")
}

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

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

> db.demo551.find();

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

{ "_id" : ObjectId("5e8e36d39e5f92834d7f05e5"), "Name" : "John" }
{ "_id" : ObjectId("5e8e36d89e5f92834d7f05e6"), "Name" : "Chris Brown" }
{ "_id" : ObjectId("5e8e36de9e5f92834d7f05e7"), "Name" : "John Doe" }
{ "_id" : ObjectId("5e8e36e59e5f92834d7f05e8"), "Name" : "John Smith" }
{ "_id" : ObjectId("5e8e36ec9e5f92834d7f05e9"), "Name" : "Carol" }

동일한 키에 OR 조건을 적용하는 쿼리

이제 Name이라는 동일한 키에 대해 두 가지 값("Carol" 또는 "John") 중 하나와 일치하는 문서를 찾는 쿼리를 작성해 보겠습니다. $or 연산자 안에 $eq(equals) 연산자를 사용한 조건들을 배열로 전달합니다.

> db.demo551.find({$or:[
...       {"Name" : {$eq : "Carol"}},
...       {Name: {$eq:"John"}}
...    ]
... });

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

{ "_id" : ObjectId("5e8e36d39e5f92834d7f05e5"), "Name" : "John" }
{ "_id" : ObjectId("5e8e36ec9e5f92834d7f05e9"), "Name" : "Carol" }

정리

결과를 보면 Name 필드가 "Carol" 또는 "John"인 문서만 반환된 것을 확인할 수 있습니다. 이처럼 MongoDB에서는 동일한 키에 대해 여러 조건이 필요할 때 $or 연산자를 반복해서 작성할 필요 없이, 하나의 $or 배열 안에 조건들을 나열하기만 하면 됩니다. 참고로 단순히 같은 키의 여러 값을 비교하는 경우라면 $in 연산자({ Name: { $in: ["Carol", "John"] } })를 사용하는 것이 더 간결하고 성능 면에서도 유리합니다.