다음을 통해 공유


$or(논리 쿼리)

적용 대상: MongoDB vCore

연산자는 $or 식 배열에 대해 논리적 OR 연산을 수행하고 하나 이상의 식을 만족하는 문서를 선택합니다.

문법

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

매개 변수

매개 변수 유형 설명
expression 배열 문서를 포함하려면 하나 이상의 식이 true여야 하는 식 배열입니다.

예시

예제 1: 기본 OR 작업

15명 이상의 정규직 직원 또는 20명 이상의 파트타임 직원이 있는 매장을 찾습니다.

db.stores.find({
  $or: [
    { "staff.totalStaff.fullTime": { $gt: 15 } },
    { "staff.totalStaff.partTime": { $gt: 20 } }
  ]
})

출력:

  {
    _id: 'd924d148-9e01-4ab1-91d6-9daccb12a4dd',
    name: 'Fourth Coffee | Home Entertainment Gallery - East Adellahaven',
    location: { lat: -86.4872, lon: 130.9398 },
    staff: { totalStaff: { fullTime: 16, partTime: 14 } },
    sales: {
      totalSales: 179639,
      salesByCategory: [
        { categoryName: 'Home Theater Systems', totalSales: 18707 },
        { categoryName: 'Xbox Games', totalSales: 48276 },
        { categoryName: 'Sound Bars', totalSales: 43142 },
        { categoryName: 'Projector Mounts', totalSales: 43358 },
        { categoryName: 'Televisions', totalSales: 11325 },
        { categoryName: 'Streaming Devices', totalSales: 14831 }
      ]
    },
    promotionEvents: [
      {
        eventName: 'Massive Deal Mania',
        promotionalDates: {
          startDate: { Year: 2024, Month: 9, Day: 21 },
          endDate: { Year: 2024, Month: 9, Day: 29 }
        },
        discounts: [
          {
            categoryName: 'Home Theater Projectors',
            discountPercentage: 16
          },
          { categoryName: 'TV Mounts', discountPercentage: 17 },
          { categoryName: 'Projector Lamps', discountPercentage: 24 },
          { categoryName: 'Sound Bars', discountPercentage: 8 },
          { categoryName: 'Media Players', discountPercentage: 14 },
          {
            categoryName: 'Nintendo Switch Games',
            discountPercentage: 22
          }
        ]
      }
    ]
  }..

예제 2: 복합 OR 연산

총 판매액이 100000개가 넘거나 할인이 20개보다 큰 프로모션이 있는 상점을%.

db.stores.find({
  $or: [
    { "sales.totalSales": { $gt: 100000 } },
    { "promotionEvents.discounts.discountPercentage": { $gt: 20 } }
  ]
})

출력:

      {
        eventName: 'Bargain Blitz Bash',
        promotionalDates: {
          startDate: { Year: 2024, Month: 3, Day: 25 },
          endDate: { Year: 2024, Month: 4, Day: 3 }
        },
        discounts: [
          { categoryName: 'Pet Carriers', discountPercentage: 22 },
          { categoryName: 'Pet Collars', discountPercentage: 11 }
        ]
      },
      {
        eventName: 'Clearance Carnival',
        promotionalDates: {
          startDate: { Year: 2024, Month: 6, Day: 23 },
          endDate: { Year: 2024, Month: 6, Day: 30 }
        },
        discounts: [
          { categoryName: 'Cat Litter', discountPercentage: 18 },
          { categoryName: 'Pet Beds', discountPercentage: 8 }
        ]
      }..

예제 3: 여러 조건 및 배열이 있는 OR

전자 제품 판매, 직원 수 높음 또는 특정 프로모션 이벤트 등 다음과 같은 기준과 일치하는 매장을 찾습니다.

db.stores.find({
  $or: [
    { "sales.salesByCategory.categoryName": { $in: ["Game Controllers", "Sound Bars", "Home Theater Projectors"] } },
    {
      $and: [
        { "staff.totalStaff.fullTime": { $gt: 10 } },
        { "staff.totalStaff.partTime": { $gt: 15 } }
      ]
    },
    {
      "promotionEvents": {
        $elemMatch: {
          "eventName": "Super Sale Spectacular",
          "discounts.discountPercentage": { $gt: 15 }
        }
      }
    }
  ]
})

성능 고려 사항

  • 배열의 $or 각 조건은 독립적으로 평가됩니다.
  • 성능 향상을 위해 가능한 경우 인덱스 사용
  • 최적의 실행을 위한 조건 순서 고려
  • 동일한 필드에 대해 여러 같음 검사 대신 $in 사용 $or
  • 적절한 조건 수 $or 유지