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

MongoDB에서 $and와 $or 연산자를 결합하는 방법

MongoDB에서는 $and 연산자와 $or 연산자를 함께 사용하여 복잡한 조건의 쿼리를 작성할 수 있습니다. 이 글에서는 실제 예제를 통해 두 연산자를 결합해 문서를 조회하는 방법을 단계별로 살펴보겠습니다.

1. 샘플 컬렉션 생성하기

먼저 insertOne() 메서드를 사용하여 문서가 담긴 컬렉션을 생성합니다.

> db.demo293.insertOne({FirstName:"Chris",LastName:"Brown",Age:24});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e4d45075d93261e4bc9ea32")
}
> db.demo293.insertOne({FirstName:"David",LastName:"Miller",Age:23});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e4d45265d93261e4bc9ea33")
}
> db.demo293.insertOne({FirstName:"John",LastName:"Smith",Age:24});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e4d45385d93261e4bc9ea34")
}
> db.demo293.insertOne({FirstName:"Adam",LastName:"Doe",Age:21});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e4d46cf5d93261e4bc9ea35")
}

2. 전체 문서 조회하기

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

> db.demo293.find();

위 명령을 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : ObjectId("5e4d45075d93261e4bc9ea32"), "FirstName" : "Chris", "LastName" : "Brown", "Age" : 24 }
{ "_id" : ObjectId("5e4d45265d93261e4bc9ea33"), "FirstName" : "David", "LastName" : "Miller", "Age" : 23 }
{ "_id" : ObjectId("5e4d45385d93261e4bc9ea34"), "FirstName" : "John", "LastName" : "Smith", "Age" : 24 }
{ "_id" : ObjectId("5e4d46cf5d93261e4bc9ea35"), "FirstName" : "Adam", "LastName" : "Doe", "Age" : 21 }

3. $and와 $or를 결합한 쿼리 실행하기

다음은 $and 배열 안에 $or를 중첩하여 두 조건을 결합하는 쿼리입니다.

> db.demo293.find( {
...    $and : [
...       {
...          $or : [
...             {"FirstName" : "John"},
...             {"LastName" : "Brown"}
...          ]
...       },
...       {
...          Age:24
...       }
...    ]
...} )

위 쿼리의 의미는 다음과 같습니다.

  • $or 조건: FirstName이 "John"이거나 LastName이 "Brown"인 문서
  • $and 조건: 위 조건을 만족하면서 동시에 Age가 24인 문서

따라서 실행 결과는 다음과 같습니다.

{ "_id" : ObjectId("5e4d45075d93261e4bc9ea32"), "FirstName" : "Chris", "LastName" : "Brown", "Age" : 24 }
{ "_id" : ObjectId("5e4d45385d93261e4bc9ea34"), "FirstName" : "John", "LastName" : "Smith", "Age" : 24 }

결과 분석

Chris Brown은 LastName이 "Brown"이고 나이가 24이므로 조건에 해당하고, John Smith는 FirstName이 "John"이고 나이가 24이므로 역시 조건을 충족합니다. 반면 David Miller(나이 23)와 Adam Doe(나이 21)는 나이 조건을 만족하지 못해 결과에서 제외되었습니다.

참고로 MongoDB에서는 여러 조건을 객체에 나열하는 것만으로도 암묵적인 AND 처리가 되지만, 같은 필드에 여러 조건을 적용하거나 복잡한 논리 구조가 필요할 때는 $and 연산자를 명시적으로 사용하는 것이 좋습니다.