db.collection.aggregate()
mongodb 조회 시 find 는 간단한 조건에 대해서 사용이 용이한데 다양한 조건을 넣어서 사용할 수는 없다. 따라서 aggregate는 다양한 조건들에 대해 검색하고 싶을때 사용한다.
컬렉션 또는 뷰의 데이터에 대한 집계 값을 계산한다.
> 파이프라인에 Explain 옵션이 포함된 경우 쿼리는 집계 연산 처리에 대한 세부 정보를 제공하는 문서를 반환한다.
> 파이프라인에 $out 또는 $merge 연산자가 포함된 경우 쿼리는 빈 커서를 반환한다.
db.collection.aggregate(pipeline, options)
pipeline
- 데이터 aggregate 작업 또는 단계의 시퀀스로
- 입력 문서에 대한 연산을 수행한다.
- $out 또는 $merge 연산자가 포함되지 않는 한 컬렉션의 문서를 수정하지 않는다.
- 메서드는 배열의 요소가 아닌 별도의 인수도 사용 가능하다.
- 대신 배열로 사용하지 않으면 options 매개변수를 지정 할 수 없다.
options
- aggregate 명령에 전달하는 추가 옵션이다.
- pipeline 을 배열로 지정한 경우에만 사용할 수 있다.
db.collection.aggregate() Stages
$out, $merge, $geoNear, $changeStream, $changeStreamSplitLargeEvent 단계를 제외한 모든 단계는 파이프라인에서 여러번 사용이 가능하다.
db.collection.aggregate( [ { <stage> }, ... ] )
- $count : 집계 파이프라인의 해당 단계에 있는 문서 수를 반환한다.
- $match : 일치하는 문서의 스트림을 필터링한다.
- $group : 지정된 표현식으로 입력 문서를 그룹화하고, 표현식을 각 그룹에 적용한다.
- $limit : 지정된 개수만큼 출력한다.
- $project : 새 필드를 추가하거나 기존 필드를 제거하는 등 스트림의 문서 모양을 변경한다.
- $merge : 결과 문서를 collection에 사용한다. (새 문서 삽입, 문서 병합, 문서 교체, 기존 문서 유지, 작업 실패 등)
- $out : 파이프라인의 결과 문서는 collection에 사용한다. 파이프라인의 마지막 단계여야 한다.
db.orders.aggregate( [
// Stage 1: 날짜 기준으로 필터링
{
$match:
{
"date": { $gte: new ISODate( "2020-01-30" ), $lt: new ISODate( "2022-01-30" ) }
}
},
// Stage 2: 날짜별로 그룹화하고 결과 계산
{
$group:
{
_id: { $dateToString: { format: "%Y-%m-%d", date: "$date" } },
totalOrderValue: { $sum: { $multiply: [ "$price", "$quantity" ] } },
averageOrderQuantity: { $avg: "$quantity" }
}
},
// Stage 3: totalOrderValue 기준으로 내림차순 정렬
{
$sort: { totalOrderValue: -1 }
}
] )
검색조건
similar to LIKE '%test%' in SQL
{ "name": { "$regex": "test", "$options": "i" } }
Starts with (equivalent to LIKE 'test%'):
{ "name": { "$regex": "^test", "$options": "i" } }
Ends with (equivalent to LIKE '%test'):
{ "name": { "$regex": "test$", "$options": "i" } }
Exact match with case sensitivity:
{ "name": { "$regex": "^test$", "$options": "" } }
https://www.mongodb.com/ko-kr/docs/manual/reference/operator/aggregation-pipeline/
반응형
'백엔드 > DB' 카테고리의 다른 글
Redis 와 MongoDB 의 로그인 토큰 적합성 비교 (0) | 2024.10.31 |
---|---|
[MongoDB] MongoDB compass 설치 (GUI) (0) | 2024.10.09 |
[Mysql] 데이터 삭제하기 & AUTO INCREMENT 초기화 - DELETE, TRUNCATE, DROP (0) | 2024.08.01 |
[Mysql] Docker 환경에서 mysql 설치 후 접속 에러 - Access denied for user 'root'@'172.17.0.1' (using password: YES) (0) | 2023.12.12 |
[MySQL/Intellij] Public key retrieval is not allowed 에러 해결 (0) | 2023.09.18 |