MongoDB에서 여러 조건이 있는 쿼리

Tahseen Tauseef 2023년6월20일
  1. MongoDB의 $or 연산자
  2. $or 연산자를 사용하여 여러 조건 찾기
  3. MongoDB의 $and 연산자
  4. $and 연산자를 사용하여 여러 조건 찾기
MongoDB에서 여러 조건이 있는 쿼리

이 기사에서는 MongoDB에서 여러 문서를 사용하여 여러 조건으로 쿼리하는 방법을 설명합니다. $and$or 연산자는 각각의 예와 함께 간략하게 설명됩니다.

MongoDB는 사용자에게 다양한 논리 쿼리 연산자인 $or$and 연산자를 제공합니다. 하지만 먼저 이 기사의 목차를 살펴보겠습니다.

  1. $or 연산자
  2. $or 연산자를 사용하여 여러 조건 찾기
  3. $and 연산자
  4. $and 연산자를 사용하여 여러 조건 찾기

MongoDB의 $or 연산자

요구 사항에 따라 find(), update() 등과 같은 메서드에서 이 연산자를 사용할 수 있습니다.

  1. 이 연산자를 텍스트 쿼리, GeoSpatial 쿼리 및 정렬 작업과 함께 사용할 수도 있습니다.
  2. MongoDB는 $or 표현식의 절을 평가할 때 컬렉션 스캔을 수행합니다. 또는 인덱스가 $or 표현식의 모든 절을 지원하는 경우 MongoDB는 인덱스 스캔을 수행합니다.
  3. $or 작업을 중첩할 수도 있습니다.

두 개 이상의 expressions 배열에서 논리적 OR 연산을 실행하여 OR 연산자는 expressions 중 하나 이상을 충족하는 문서를 선택합니다. $or 연산자의 구문은 다음과 같습니다.

{ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }

다음 예를 고려하십시오.

db.inventory.find( { $or: [ { quantity: { $lt: 51 } }, { price: 20 } ] } )

이 쿼리에서 quantity 필드 값이 51 미만이거나 price 필드 값이 20 미만인 인벤토리 컬렉션의 모든 문서가 반환됩니다.

먼저 MongoDB에서 or 연산자의 동작에 대해 논의해 보겠습니다.

$or 연산자에 대한 절 및 인덱스

$or 표현식의 모든 절을 평가할 때 MongoDB는 컬렉션 스캔 또는 인덱스 스캔을 수행합니다. MongoDB는 인덱스가 모든 절을 지원하는 경우 인덱스 스캔을 실행합니다.

결과적으로 MongoDB가 명령문을 분석하려면 $or 표현식의 모든 절이 인덱스에서 지원되어야 합니다. 그렇지 않은 경우 MongoDB는 컬렉션 스캔을 수행합니다.

$or 쿼리의 각 절은 $or 쿼리와 함께 인덱스를 사용할 때 해당 인덱스를 활용할 수 있습니다. 아래의 다음 예를 살펴보십시오.

db.inventory.find( { $or: [ { quantity: { $lt: 51 } }, { price: 20 } ] } )

복합 인덱스 대신 quantity에 대해 하나의 인덱스를 설정하고 이 쿼리를 처리하기 위해 price에 대해 다른 인덱스를 설정합니다.

db.inventory.createIndex( { quantity: 1 } )
db.inventory.createIndex( { price: 1 } )

$or 절을 활성화하기 위해 MongoDB는 geoHaystack 인덱스를 제외한 모든 인덱스를 사용할 수 있습니다.

text 쿼리 및 $or 연산자

$or$text 쿼리가 포함된 경우 인덱스는 $or 배열의 모든 절을 지원해야 합니다. 따라서 $text 쿼리는 인덱스를 사용해야 하며 $or 쿼리는 해당 절이 모두 지원되는 경우에만 인덱스를 사용할 수 있습니다.

$text 쿼리가 인덱스를 사용하지 않는 경우 쿼리는 오류를 반환합니다.

GeoSpatial 쿼리 및 $or 연산자

$ornear 절($nearSphere$near 포함)을 제외한 지리적 절을 허용합니다. 다른 절과 함께 $or에 관계절이 있을 수 없습니다.

정렬 작업 및 $or 연산자

sort()$or 쿼리를 수행할 때 MongoDB는 이제 $or 절을 지원하는 인덱스를 활용할 수 있습니다. 이전 버전의 MongoDB에서는 인덱스가 사용되지 않았습니다.

$or VS $in

동일한 필드의 값에 대한 동등성 테스트인 expressions와 함께 $or 연산자 대신 $in 연산자를 사용하십시오.

예를 들어 inventory 컬렉션에서 quantity 필드 값이 40 또는 1000인 모든 문서를 선택하려면 $in 연산자를 사용합니다.

db.inventory.find ( { quantity: { $in: [40, 1000] } } )

$or 연산자를 사용하여 여러 조건 찾기

MongoDB의 또는 연산자는 제공된 구문 중 하나 이상과 일치하는 문서만 선택하거나 검색하는 데 사용됩니다.

  1. 요구 사항에 따라 find(), update() 등과 같은 메서드에서 이 연산자를 사용할 수도 있습니다.
  2. 텍스트 쿼리 및 정렬 작업에도 이 연산자를 사용할 수 있습니다.
  3. $or 작업을 중첩할 수도 있습니다.

$or 연산자의 작동 방식을 이해하기 위해 예제를 살펴보겠습니다.

예:

다음 문서를 포함하는 컬렉션을 만들어 봅시다.

db={
  "students": [
    {
      id: 1,
      name: "Ali",
      Age: 24,
      language: "JavaScript",
      status: "inactive",
      score: 82
    },
    {
      id: 2,
      name: "Haris",
      Age: 35,
      language: "Python",
      status: "inactive",
      score: 87
    },
    {
      id: 3,
      team: "Hamza",
      Age: 27,
      status: "active",
      language: "Python",
      score: 84
    }
  ]
}

find() 메서드를 사용하여 컬렉션의 모든 문서를 표시합니다.

db.students.find();

다음은 $or 연산자가 있는 MongoDB 쿼리입니다.

db.students.find({
  $or: [
    {
      Age: {
        $lte: 24
      }
    },
    {
      score: {
        $lt: 80
      }
    },
    {
      status: "Inactive"
    }
  ]
})

그러면 다음과 같은 출력이 생성됩니다.

사용 또는 연산자

MongoDB의 $and 연산자

$and는 하나 이상의 표현식 배열(expression1>, expression2> 등)에서 논리적 AND 연산을 수행하고 모든 표현식을 충족하는 문서를 선택합니다.

행동:

$and는 쿼리 엔진이 쿼리를 개선하는 데 도움이 되도록 다음과 같이 실수를 처리합니다.

  1. $and에 제공된 표현식이 단독으로 평가되는 경우 오류가 발생하는 경우 표현식을 포함하는 $and는 오류가 발생할 수 있지만 이것이 보장되지는 않습니다.
  2. $and에 제공된 첫 번째 표현식 다음에 제공된 표현식은 첫 번째 표현식이 false로 평가되더라도 오류를 유발할 수 있습니다.

통사론:

and 연산자를 사용할 때 사용되는 구문은 다음과 같습니다.

{ $and: [{ <expression1> },{ <expression2> }, ... ,{ <expressionN> }] }

예를 들어 다음 쿼리는 $x0인 경우 항상 오류를 생성합니다.

db.example.find( {
   $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] }
} )

$and에 제공된 여러 표현식을 포함하는 다음 쿼리는 $x0인 문서가 있는 경우 오류를 생성할 수 있습니다.

db.example.find( {
   $and: [
      { x: { $ne: 0 } },
      { $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] } }
   ]
} )

$and 연산자를 사용하여 여러 조건 찾기

MongoDB에서 $and 연산자를 사용하여 여러 기준을 적용할 수 있습니다. 먼저 $and 연산을 사용하여 모든 조건 구문을 충족하는 모든 논문을 선택합니다.

  1. 요구 사항에 따라 find(), update() 등과 같은 메서드에서 이 연산자를 사용할 수 있습니다.
  2. 텍스트 쿼리 및 정렬 작업에도 이 연산자를 사용할 수 있습니다.

예를 들어 이해해 봅시다.

다음 레코드가 students 컬렉션에 삽입됩니다.

db={
  "students": [
    {
      id: 1,
      name: "Ali",
      Age: 24,
      language: "JavaScript",
      status: "inactive",
      score: 82
    },
    {
      id: 2,
      name: "Haris",
      Age: 35,
      language: "Python",
      status: "inactive",
      score: 87
    },
    {
      id: 3,
      team: "Hamza",
      Age: 27,
      status: "active",
      language: "Python",
      score: 84
    }
  ]
}

이제 $and 연산자를 사용하여 여러 조건을 적용하고 문서를 찾습니다.

db.students.find({
  $and: [
    {
      "language": "Python"
    },
    {
      "Age": 35
    }
  ]
})

여기서 $and 작업은 언어Python이고 Age35인 문서를 찾기 위해 적용됩니다.

이 스크린샷에서 MongoDB에서 위 코드의 작동을 확인하십시오.

사용 및 연산자

주어진 조건에 따라 성공적으로 결과를 얻었습니다. 그런 다음 $and 연산자를 사용하고 조건에 따라 문서를 검색할 수 있습니다.

이 기사에서는 $and$or 연산자를 사용하여 MongoDB에서 여러 문서를 사용하여 여러 조건으로 쿼리하는 방법을 자세히 설명합니다.

관련 문장 - MongoDB Query