2023. 3. 9. 07:50ㆍmongodb
1. 몽고디비 그룹바이 문법
$group 파이프라인 연산자는 MongoDB에서 집계(aggregate)를 수행하는데 사용됩니다. 이 연산자는 문서들을 그룹화하고 그룹화된 문서들의 합계, 평균, 최대, 최소 등의 값을 계산할 수 있습니다.
$group 파이프라인 연산자는 다음과 같은 구문을 사용합니다.
{
$group: {
_id: <expression>, // 그룹화할 기준 필드
<field1>: { <accumulator1> : <expression1> },
...
}
}
여기서 _id 필드는 그룹화할 기준 필드를 나타내며, <field>는 계산된 결과를 저장할 필드를 나타냅니다. <accumulator>는 계산 방법을 나타내며, <expression>은 계산 대상 필드를 나타냅니다.
예를 들어, 다음은 orders 컬렉션에서 status 필드를 그룹화하고 각 그룹의 합계를 계산하는 쿼리입니다:
db.orders.aggregate([
{
$group : {
_id : "$status",
totalAmount: { $sum: "$amount" }
}
}
])
이 쿼리는 orders 컬렉션에서 status 필드를 그룹화하고 각 그룹의 amount 필드의 합계를 totalAmount 필드에 저장합니다. 결과는 각 status 값별로 합계가 계산된 문서들의 배열이 됩니다.
2. 샘플 데이터 사용해 만들기
먼저 다음과 같은 샘플 데이터를 사용하겠습니다. 이는 sales라는 컬렉션에 저장된 판매 기록 데이터입니다.
db.sales.insertMany(
[
{ "_id" : 1, "item" : "apple", "price" : 0.5, "quantity" : 10, "date" : ISODate("2023-03-01T08:00:00Z") },
{ "_id" : 2, "item" : "banana", "price" : 0.25, "quantity" : 20, "date" : ISODate("2023-03-01T09:00:00Z") },
{ "_id" : 3, "item" : "pear", "price" : 0.3, "quantity" : 15, "date" : ISODate("2023-03-01T10:00:00Z") },
{ "_id" : 4, "item" : "apple", "price" : 0.5, "quantity" : 5, "date" : ISODate("2023-03-02T08:00:00Z") },
{ "_id" : 5, "item" : "banana", "price" : 0.25, "quantity" : 15, "date" : ISODate("2023-03-02T09:00:00Z") },
{ "_id" : 6, "item" : "pear", "price" : 0.3, "quantity" : 10, "date" : ISODate("2023-03-02T10:00:00Z") }
]
)
위 데이터에서 $group 연산자를 사용하여 item 필드를 기준으로 그룹화하고, price, quantity, total_price 및 date 필드를 계산하여 그룹화된 결과를 반환하는 쿼리는 다음과 같습니다.
db.sales.aggregate([
{
$group: {
_id: "$item",
price: { $avg: "$price" },
quantity: { $sum: "$quantity" },
total_price: { $sum: { $multiply: ["$price", "$quantity"] } },
date: { $max: "$date" }
}
}
])
위 쿼리는 sales 컬렉션에서 item 필드를 그룹화하고 각 그룹에서 평균 price 값을 계산하여 price 필드에 저장합니다. quantity 필드는 각 그룹의 quantity 값을 합산하고, total_price 필드는 price와 quantity 값을 곱한 결과를 합산하여 저장합니다. 마지막으로, date 필드는 각 그룹에서 가장 최근 날짜를 찾아 저장합니다.
위 쿼리의 결과는 다음과 같습니다.
[
{
"_id": "apple",
"price": 0.5,
"quantity": 15,
"total_price": 7.5,
}
]
이상 몽고디비 group by 정리를 마무리하겠습니다.
'mongodb' 카테고리의 다른 글
Mongodb 인덱스 생성시 주의사항 - ( 백그라운드 인덱스 생성 ) (0) | 2023.03.14 |
---|---|
mongodb의 Data join은 lookup!! (0) | 2023.03.10 |
MongoDB TTL 설정 ( 데이터 자동 삭제 스케줄 ) (1) | 2022.09.08 |
MongoDB Spark Connection 테스트 (0) | 2021.07.15 |
Mongodb Shard 추가 및 주의사항 (0) | 2021.04.22 |