문서 홈 → 애플리케이션 개발 → MongoDB 매뉴얼
$match (aggregation)
정의
호환성
다음 환경에서 호스팅되는 배포에 $match
사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
$match
단계의 프로토타입 형식은 다음과 같습니다.
{ $match: { <query> } }
$match
는 쿼리 조건을 지정하는 문서를 받습니다. 쿼리 구문은 읽기 작업 쿼리 구문과 동일합니다. 즉, $match
는 원시 애그리게이션 표현식 을 허용하지 않습니다. 대신 $expr
쿼리 표현식을 사용하여 $match
에 애그리게이션 표현식을 포함합니다.
행동
파이프라인 최적화
$match
를 집계 파이프라인 의 가능한 한 일찍 배치합니다.$match
는 집계 파이프라인의 총 문서 수를 제한하므로$match
작업을 더 일찍 수행하면 파이프라인의 처리량을 최소화할 수 있습니다.를 파이프라인의 맨
$match
처음에 배치하면 쿼리는 다른db.collection.find()
또는 과 같은 인덱스 를 활용할db.collection.findOne()
수 있습니다.
제한 사항
$match
쿼리 구문은 읽기 작업 쿼리 구문과 동일합니다. 즉,$match
는 원시 애그리게이션 표현식 을 허용하지 않습니다.$match
에 애그리게이션 표현식을 포함하려면$expr
쿼리 표현식을 사용합니다.{ $match: { $expr: { <aggregation expression> } } } $near
쿼리에서는 또는 를 집계 파이프라인의 일부로 사용할 수$nearSphere
없습니다. 대안으로 다음 중 하나를 수행할 수 있습니다.$match
단계에서 또는
$match
$geoWithin
$center
$centerSphere
와 함께 쿼리 연산자를 사용합니다.
$text
$match
단계에서 를 사용하려면 단계가 파이프라인의 첫 번째 단계여야$match
합니다.보기는 텍스트 검색을 지원하지 않습니다.
Atlas Search를 사용하여 Atlas에서 데이터 필터링하기
MongoDB Atlas 에 저장된 데이터의 경우, 쿼리를 실행할 때 Atlas Search 복합 연산자 filter
옵션을 사용하여 문서를 일치시키거나 필터링할 $search
수 있습니다. }$match
$search
다음에 를 실행하는 것은 $search
복합 연산자 filter
옵션을 사용하여 를 실행하는 것보다 성능이 떨어집니다.
filter
옵션에 대해 자세히 알아보려면 Atlas 문서에서 복합 을 참조하세요.
예제
이 예제에서는 다음 문서와 함께 articles
(이)라는 collection을 사용합니다.
{ "_id" : ObjectId("512bc95fe835e68f199c8686"), "author" : "dave", "score" : 80, "views" : 100 } { "_id" : ObjectId("512bc962e835e68f199c8687"), "author" : "dave", "score" : 85, "views" : 521 } { "_id" : ObjectId("55f5a192d4bede9ac365b257"), "author" : "ahn", "score" : 60, "views" : 1000 } { "_id" : ObjectId("55f5a192d4bede9ac365b258"), "author" : "li", "score" : 55, "views" : 5000 } { "_id" : ObjectId("55f5a1d3d4bede9ac365b259"), "author" : "annT", "score" : 60, "views" : 50 } { "_id" : ObjectId("55f5a1d3d4bede9ac365b25a"), "author" : "li", "score" : 94, "views" : 999 } { "_id" : ObjectId("55f5a1d3d4bede9ac365b25b"), "author" : "ty", "score" : 95, "views" : 1000 }
동급 일치
다음 작업은 $match
를 사용하여 간단한 동등성 매치를 수행합니다.
db.articles.aggregate( [ { $match : { author : "dave" } } ] );
$match
는 author
필드가 dave
인 문서를 선택하고 애그리게이션은 다음을 반환합니다.
{ "_id" : ObjectId("512bc95fe835e68f199c8686"), "author" : "dave", "score" : 80, "views" : 100 } { "_id" : ObjectId("512bc962e835e68f199c8687"), "author" : "dave", "score" : 85, "views" : 521 }
카운트 수행
다음 예제에서는 $match
파이프라인 연산자를 사용하여 처리할 문서를 선택한 다음 결과를 $group
파이프라인 연산자로 파이프하여 문서 수를 계산합니다.
db.articles.aggregate( [ { $match: { $or: [ { score: { $gt: 70, $lt: 90 } }, { views: { $gte: 1000 } } ] } }, { $group: { _id: null, count: { $sum: 1 } } } ] );
집계 파이프라인에서 $match
는 score
가 70
보다 크고 90
보다 작거나 또는 views
가 1000
보다 크거나 같은 문서를 선택합니다. 그런 다음 이러한 문서는 $group
로 파이프되어 계산을 수행합니다. 애그리게이션은 다음을 반환합니다.
{ "_id" : null, "count" : 5 }
추가 정보
애그리게이션에 대한 자세한 내용과 사용 사례는 다음 페이지를 참조하세요.