안녕하세요, 외계인 여러분! 나는 파반이다. 그래서 이번 Repository에서는 기본적인 예시를 통해 Aggregation의 모든 단계를 심도있게 설명하겠습니다. 추가 학습을 위한 리소스 링크도 포함하겠습니다.
따라서 이 저장소에는 다양한 MongoDB 집계 파이프라인을 위한 JSON 파일이 포함되어 있습니다. 이러한 파이프라인은 다양한 집계 단계와 작업을 사용하여 데이터를 처리하고 분석하는 방법을 보여줍니다.
MongoDB의 집계는 컬렉션에 저장된 데이터를 처리하고 분석하는 강력한 방법입니다. 이를 통해 데이터 필터링, 그룹화, 정렬, 변환과 같은 작업을 수행할 수 있습니다.
db.orders.insertOne({ "order_id": 26, "cust_id": 1006, "status": "A", "amount": 275, "items": ["apple", "banana"], "date": "2023-01-26" });
db.orders.find().pretty();
db.orders.updateOne( { "order_id": 2 }, { $set: { "status": "C", "amount": 500 }, $currentDate: { "lastModified": true } } );
db.orders.deleteOne({ "order_id": 1 });
지정된 조건과 일치하는 문서만 다음 파이프라인 단계로 전달하도록 문서를 필터링합니다.
db.orders.aggregate([ { $match: { "status": "A" } } ]);
지정된 _id 표현식을 기준으로 입력 문서를 그룹화하고 각각의 개별 그룹에 대해 문서를 출력합니다. _id 필드에는 값별로 고유한 그룹이 포함되어 있습니다.
db.orders.aggregate([ { $group: { _id: "$cust_id", totalSpent: { $sum: "$amount" } } } ]);
요청된 필드가 포함된 문서를 파이프라인의 다음 단계로 전달합니다.
db.orders.aggregate([ { $project: { "order_id": 1, "items": 1, "_id": 0 } } ]);
모든 입력 문서를 정렬하고 정렬된 순서대로 파이프라인에 반환합니다.
db.orders.aggregate([ { $sort: { "amount": -1 } } ]);
파이프라인의 다음 단계로 전달되는 문서 수를 제한합니다.
db.orders.aggregate([ { $limit: 5 } ]);
처음 n개 문서를 건너뛰고 나머지 문서를 파이프라인의 다음 단계로 전달합니다.
db.orders.aggregate([ { $skip: 5 } ]);
동일한 데이터베이스의 다른 컬렉션에 대해 왼쪽 외부 조인을 수행하여 "조인된" 컬렉션의 문서를 필터링하여 처리합니다.
db.orders.aggregate([ { $lookup: { from: "orderDetails", localField: "order_id", foreignField: "order_id", as: "details" } } ]);
입력 문서에서 배열 필드를 분해하여 각 요소에 대한 문서를 출력합니다.
db.orders.aggregate([ { $unwind: "$items" } ]);
문서에 새 필드를 추가합니다.
db.orders.aggregate([ { $addFields: { totalWithTax: { $multiply: ["$amount", 1.1] } } } ]);
입력 문서를 지정된 문서로 바꿉니다.
db.orders.aggregate([ { $replaceRoot: { newRoot: "$items" } } ]);
숫자 값의 합계를 계산하고 반환합니다. $sum은 숫자가 아닌 값을 무시합니다.
db.orders.aggregate([ { $group: { _id: "$cust_id", totalSpent: { $sum: "$amount" } } } ]);
숫자 값의 평균값을 계산하여 반환합니다.
db.orders.aggregate([ { $group: { _id: "$cust_id", averageSpent: { $avg: "$amount" } } } ]);
숫자 값 중 최소값을 반환합니다.
db.orders.aggregate([ { $group: { _id: "$cust_id", minSpent: { $min: "$amount" } } } ]);
숫자 값 중 최대값을 반환합니다.
db.orders.aggregate([ { $group: { _id: "$cust_id", maxSpent: { $max: "$amount" } } } ]);
각 그룹의 문서에서 첫 번째 값을 반환합니다.
db.orders.aggregate([ { $group: { _id: "$cust_id", firstOrder: { $first: "$amount" } } } ]);
각 그룹의 문서에서 마지막 값을 반환합니다.
db.orders.aggregate([ { $group: { _id: "$cust_id", lastOrder: { $last: "$amount" } } } ]);
CRUD 및 집계 작업을 수행하는 데 사용되는 문서 예:
[ { "order_id": 1, "cust_id": 1001, "status": "A", "amount": 250, "items": ["apple", "banana"], "date": "2023-01-01" }, { "order_id": 2, "cust_id": 1002, "status": "B", "amount": 450, "items": ["orange", "grape"], "date": "2023-01-02" }, { "order_id": 3, "cust_id": 1001, "status": "A", "amount": 300, "items": ["apple", "orange"], "date": "2023-01-03" }, { "order_id": 4, "cust_id": 1003, "status": "A", "amount": 150, "items": ["banana", "grape"], "date": "2023-01-04" }, { "order_id": 5, "cust_id": 1002, "status": "C", "amount": 500, "items": ["apple", "banana"], "date": "2023-01-05" }, { "order_id": 6, "cust_id": 1004, "status": "A", "amount": 350, "items": ["orange", "banana"], "date": "2023-01-06" }, { "order_id": 7, "cust_id": 1005, "status": "B", "amount": 200, "items": ["grape", "banana"], "date": "2023-01-07" }, { "order_id": 8, "cust_id": 1003, "status": "A", "amount": 100, "items": ["apple", "orange"], "date": "2023-01-08" }, { "order_id": 9, "cust_id": 1004, "status": "C", "amount": 400, "items": ["banana", "grape"], "date": "2023-01-09" }, { "order_id": 10, "cust_id": 1001, "status": "A", "amount": 250, "items": ["apple", "grape"], "date": "2023-01-10" }, { "order_id": 11, "cust_id": 1002, "status": "B", "amount": 350, "items": ["orange", "banana"], "date": "2023-01-11" }, { "order_id": 12, "cust_id": 1003, "status": "A", "amount": 450, "items": ["apple", "orange"], "date": "2023-01-12" }, { "order_id": 13, "cust_id": 1005, "status": "A", "amount": 150, "items": ["banana", "grape"], "date": "2023-01-13" }, { "order_id": 14, "cust_id": 1004, "status": "C ", "amount": 500, "items": ["apple", "banana"], "date": "2023-01-14" }, { "order_id": 15, "cust_id": 1002, "status": "A", "amount": 300, "items": ["orange", "grape"], "date": "2023-01-15" }, { "order_id": 16, "cust_id": 1003, "status": "B", "amount": 200, "items": ["apple", "banana"], "date": "2023-01-16" }, { "order_id": 17, "cust_id": 1001, "status": "A", "amount": 250, "items": ["orange", "grape"], "date": "2023-01-17" }, { "order_id": 18, "cust_id": 1005, "status": "A", "amount": 350, "items": ["apple", "banana"], "date": "2023-01-18" }, { "order_id": 19, "cust_id": 1004, "status": "C", "amount": 400, "items": ["orange", "grape"], "date": "2023-01-19" }, { "order_id": 20, "cust_id": 1001, "status": "B", "amount": 150, "items": ["apple", "orange"], "date": "2023-01-20" }, { "order_id": 21, "cust_id": 1002, "status": "A", "amount": 500, "items": ["banana", "grape"], "date": "2023-01-21" }, { "order_id": 22, "cust_id": 1003, "status": "A", "amount": 450, "items": ["apple", "banana"], "date": "2023-01-22" }, { "order_id": 23, "cust_id": 1004, "status": "B", "amount": 350, "items": ["orange", "banana"], "date": "2023-01-23" }, { "order_id": 24, "cust_id": 1005, "status": "A", "amount": 200, "items": ["grape", "banana"], "date": "2023-01-24" }, { "order_id": 25, "cust_id": 1001, "status": "A", "amount": 300, "items": ["apple", "orange"], "date": "2023-01-25" } ]
주문을 상태별로 그룹화하여 상태별 총액과 평균 금액을 계산합니다.
db.orders.aggregate([ { $group: { _id: "$status", totalAmount: { $sum: "$amount" }, averageAmount: { $avg: "$amount" } } } ]);
주문 ID, 고객 ID 및 세금이 포함된 총액에 대한 계산 필드를 투영합니다(세금 10% 가정).
db.orders.aggregate([ { $project: { "order_id": 1, "cust_id": 1, "totalWithTax": { $multiply: ["$amount", 1.1] } } } ]);
주문을 상태별로 오름차순으로 정렬한 다음 금액별로 내림차순으로 정렬합니다.
db.orders.aggregate([ { $sort: { "status": 1, "amount": -1 } } ]);
금액이 가장 높은 상위 3개 주문으로 결과를 제한합니다.
db.orders.aggregate([ { $sort: { "amount": -1 } }, { $limit: 3 } ]);
처음 5개 주문을 건너뛰고 나머지는 반품합니다.
db.orders.aggregate([ { $skip: 5 } ]);
orderDetails 컬렉션과 주문 컬렉션을 결합하여 주문 세부정보를 추가합니다.
db.orders.aggregate([ { $lookup: { from: "orderDetails", localField: "order_id", foreignField: "order_id", as: "details" } } ]);
Deconstructs the items array in each order to output a document for each item.
db.orders.aggregate([ { $unwind: "$items" } ]);
Adds a new field discountedAmount which is 90% of the original amount.
db.orders.aggregate([ { $addFields: { discountedAmount: { $multiply: ["$amount", 0.9] } } } ]);
Replaces the root document with the items array.
db.orders.aggregate([ { $replaceRoot: { newRoot: "$items" } } ]);
Calculates the total amount for all orders.
db.orders.aggregate([ { $group: { _id: null, totalAmount: { $sum: "$amount" } } } ]);
Calculates the average amount spent per order.
db.orders.aggregate([ { $group: { _id: null, averageAmount: { $avg: "$amount" } } } ]);
Finds the minimum amount spent on an order.
db.orders.aggregate([ { $group: { _id: null, minAmount: { $min: "$amount" } } } ]);
Finds the maximum amount spent on an order.
db.orders.aggregate([ { $group: { _id: null, maxAmount: { $max: "$amount" } } } ]);
Gets the first order placed (by date).
db.orders.aggregate([ { $sort: { "date": 1 } }, { $group: { _id: null, firstOrder: { $first: "$$ROOT" } } } ]);
Gets the last order placed (by date).
db.orders.aggregate([ { $sort: { "date": -1 } }, { $group: { _id: null, lastOrder: { $last: "$$ROOT" } } } ]);
위 내용은 MongoDB 집계 파이프라인의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!