AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.

$or (쿼리 자 연산자)

$or

$or는 하나 이상의 표현식으로 구성된 배열에 대해 논리적 OR 작업을 수행하고, 표현식 중 하나 이상을 충족하는 문서를 선택합니다.

다음 환경에서 호스팅되는 배포에 $or 사용할 수 있습니다.

  • MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스

$or 연산자의 구문은 다음과 같습니다.

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

이 페이지의 예시는 sample_mflix 데이터 세트의 데이터를 사용합니다. 이 데이터 세트를 자체 관리형 MongoDB 배포서버에 로드하는 방법에 대한 자세한 내용은 샘플 데이터세트 로드를 참조하세요. 샘플 데이터베이스를 수정한 경우, 이 페이지의 예시를 실행하려면 데이터베이스를 제거하고 다시 생성해야 할 수 있습니다.

다음 예를 고려하십시오.

db.movies.find( { $or: [ { runtime: { $gt: 1000 } }, { year: { $lt: 1910 } } ] }, { _id: 0, title: 1, year: 1, runtime: 1 })
[ { runtime: 11, title: 'The Great Train Robbery', year: 1903 }, { runtime: 14, title: 'A Corner in Wheat', year: 1909 }, { runtime: 1256, title: 'Centennial', year: 1978 }, { runtime: 1140, title: 'Baseball', year: 1994 }, { runtime: 1, title: 'The Kiss', year: 1896 }, { runtime: 1, title: 'The Kiss', year: 1896 }]

이 쿼리 movies 컬렉션 에서 다음 조건 중 하나를 충족하는 모든 문서를 선택합니다.

  • runtime 필드 값이 1000보다 큽니다.

  • year 필드 값이 1910보다 빠릅니다.

$or 표현식의 절을 평가할 때, MongoDB는 컬렉션 스캔 또는 인덱스 스캔을 수행합니다. 인덱스에서 모든 절을 지원하는 경우 MongoDB는 인덱스 스캔을 수행합니다. 인덱스를 사용하여 $or 표현식을 평가하려면 $or 표현식의 모든 절이 인덱스에서 지원되어야 합니다. 그렇지 않으면 MongoDB가 컬렉션 스캔을 수행합니다.

$or 쿼리와 함께 인덱스를 사용하는 경우 $or의 각 절은 자체 인덱스를 사용할 수 있습니다. 다음 쿼리를 고려해보세요.

db.movies.find( { $or: [ { runtime: { $gt: 1000 } }, { year: { $lt: 1910 } } ] })

이 쿼리 지원 하려면 복합 인덱스 대신 runtime 에 인덱스 하나를 만들고 year 에 다른 인덱스 만듭니다.

db.movies.createIndex( { runtime: 1 } ),db.movies.createIndex( { year: 1 } ),

$or에 $text 쿼리가 포함된 경우 $or 배열의 모든 절이 인덱스에서 지원되어야 합니다. 이는 $text 쿼리가 인덱스를 사용해야 하고 모든 절이 인덱스에서 지원되는 경우에만 $or가 인덱스를 사용할 수 있기 때문입니다. $text 쿼리가 인덱스를 사용할 수 없으면 오류를 반환합니다.

참고

$text 자체 관리(비Atlas) 배포를 위한 텍스트 쿼리 기능을 제공합니다. MongoDB 에서 호스팅되는 데이터의 경우, MongoDB 향상된 전체 텍스트 쿼리 솔루션인 MongoDB Search.도 제공합니다.

$or 지리 공간적 절을 지원합니다. 그러나 near 절($near 또는 $nearSphere)를 사용하는 경우 $or에는 다른 절이 포함될 수 없습니다. $or를 단일 절과 함께 사용하면 $or 연산자를 생략한 것과 동일한 효과가 있습니다.

$or가 비근거리 지리 공간적 절($geoIntersects)을 사용하므로 다음 쿼리가 유효합니다.

db.theaters.find( { $or: [ { "location.geo": { $geoIntersects: { $geometry: { type: "Polygon", coordinates: [ [ [ -74.5, 40.5 ], [ -73.5, 40.5 ], [ -73.5, 41.0 ], [ -74.5, 40.5 ] ] ] } } } }, { "location.address.state": "NY" } ]} ).sort({ theaterId: 1 }).limit(5)
[ { _id: ObjectId('59a47287cfa9a3a73e51e92f'), theaterId: 200, location: { address: { street1: '3124 Jericho Tpke', city: 'East Northport', state: 'NY', zipcode: '11731' }, geo: { type: 'Point', coordinates: [ -73.319092, 40.838463 ] } } }, { _id: ObjectId('59a47287cfa9a3a73e51ead6'), theaterId: 345, location: { address: { street1: '148 Walt Whitman Rd', city: 'Huntington Station', state: 'NY', zipcode: '11746' }, geo: { type: 'Point', coordinates: [ -73.410637, 40.825775 ] } } }, { _id: ObjectId('59a47287cfa9a3a73e51eae8'), theaterId: 374, location: { address: { street1: '2478 Central Park Ave', city: 'Yonkers', state: 'NY', zipcode: '10710' }, geo: { type: 'Point', coordinates: [ -73.826805, 40.983246 ] } } }, { _id: ObjectId('59a47287cfa9a3a73e51eafd'), theaterId: 384, location: { address: { street1: '40 Catherwood Road', city: 'Ithaca', state: 'NY', zipcode: '14850' }, geo: { type: 'Point', coordinates: [ -76.492142, 42.481991 ] } } }, { _id: ObjectId('59a47287cfa9a3a73e51eb2c'), theaterId: 428, location: { address: { street1: '1 Crossgates Mall Rd', city: 'Albany', state: 'NY', zipcode: '12203' }, geo: { type: 'Point', coordinates: [ -73.848686, 42.690285 ] } } }]

sort()를 사용하여 $or 쿼리를 실행할 때 MongoDB는 $or 절을 지원하는 인덱스를 사용할 수 있습니다.

$or을 사용하여 부분 인덱스를 생성할 수 있습니다. db.collection.createIndex() 메서드의 partialFilterExpression을 사용하여 부분 인덱스를 생성하세요.

$or <expressions> 같은 필드의 값에 대한 등호 검사와 함께 $in을 사용할 경우, $or 대신 사용하세요.

이 쿼리는 movies 컬렉션에서 문서를 선택합니다. 여기서 year는 1903 또는 1909입니다.

db.movies.find( { year: { $in: [1903, 1909] } }, { _id: 0, title: 1, year: 1 })
[ { title: 'The Great Train Robbery', year: 1903 }, { title: 'A Corner in Wheat', year: 1909 }]

$or 작업을 중첩할 수 있습니다.

쿼리 엔진이 쿼리를 최적화할 수 있도록 $or 은 다음과 같이 오류를 처리합니다:

  • $or에 제공된 표현식이 단독으로 평가될 때 오류가 발생하는 경우, 표현식이 포함된 $or이 오류를 일으킬 수 있지만 오류가 보장되지는 않습니다.

  • $or에 제공된 첫 번째 표현식 뒤에 제공된 표현식은 첫 번째 표현식이 true로 평가되더라도 오류를 일으킬 수 있습니다.

이 페이지 평가하기

이 페이지의 내용