MongoDB đường dẫn tổng hợp
có sẵn để giải quyết vấn đề của bạn. Bạn nhận được thông tin chi tiết về mảng mà tôi đang xử lý với $unwind
và sau đó sử dụng $group
để "tính tổng" các tổng:
db.collection.aggregate([
// Unwind the array to de-normalize as documents
{ "$unwind": "$details" },
// Group on the key you want and provide other values
{ "$group": {
"_id": "$details.itemcode",
"itemname": { "$first": "$details.itemname" },
"totalprice": { "$sum": "$details.price" },
"totalqty": { "$sum": "$details.qty" }
}}
])
Lý tưởng nhất là bạn muốn có một $match
vào đó để lọc ra mọi dữ liệu không liên quan trước tiên. Về cơ bản, đây là truy vấn MongoDB và nhận tất cả các đối số và toán tử giống nhau.
Hầu hết ở đây là đơn giản thực sự. $unwind
giống như một "JOIN" trong SQL ngoại trừ việc trong cấu trúc nhúng, "join" đã được tạo sẵn, vì vậy bạn chỉ cần "hủy chuẩn hóa" giống như một phép nối sẽ thực hiện giữa các mối quan hệ bảng "một đến nhiều" nhưng chỉ trong tài liệu của chính nó. Về cơ bản, nó "lặp lại" các phần tài liệu "cha" vào mảng cho mỗi thành viên mảng như một tài liệu mới.
Sau đó, $group
hoạt động của một khóa, như trong "GROUP BY", trong đó "khóa" là _id
giá trị. Mọi thứ ở đó là "riêng biệt" và tất cả các giá trị khác được tập hợp bởi "toán tử nhóm".
Đây là nơi các hoạt động như $first
vào. Như được mô tả trên trang hướng dẫn sử dụng, giá trị này lấy giá trị "đầu tiên" từ "ranh giới nhóm" được đề cập trong "khóa" trước đó. Bạn muốn điều này vì tất cả các giá trị của trường này "có khả năng" giống nhau, vì vậy đây là một lựa chọn hợp lý để chỉ chọn kết quả phù hợp "đầu tiên".
Cuối cùng là $sum
toán tử nhóm mà thực hiện những gì cần được mong đợi. Tất cả các giá trị được cung cấp trong "khóa" được "thêm vào" hoặc "cộng lại" với nhau để cung cấp tổng số. Cũng giống như SQL SUM()
.
Cũng lưu ý rằng tất cả $
các tên có tiền tố ở đó là cách khuôn khổ tổng hợp xử lý các biến cho tên "trường / thuộc tính" trong tài liệu hiện tại đang được xử lý. "Ký hiệu dấu chấm"
được sử dụng để tham chiếu đến "các trường / thuộc tính" được nhúng lồng trong tên thuộc tính mẹ.
Sẽ rất hữu ích khi học tập hợp trong MongoDB. Nó là để truy vấn chung cho bất cứ điều gì ngoài câu lệnh "SELECT" cơ bản đối với SQL. Không chỉ để "phân nhóm" mà còn cho các thao tác khác.
Đọc qua tài liệu về tất cả toán tử tổng hợp và cũng hãy xem Ánh xạ SQL thành Tổng hợp trong tài liệu như một hướng dẫn chung nếu bạn đã quen với SQL để bắt đầu. Nó giúp giải thích các khái niệm và chỉ ra một số điều có thể làm được.