MongoDB $group

Giới thiệu về MongoDB $group

Trong MongoDB, $group là một trong những toán tử quan trọng được sử dụng trong quá trình truy vấn để thực hiện việc nhóm các tài liệu theo các trường nhất định. Điều này thường được sử dụng trong báo cáo và phân tích dữ liệu, cho phép bạn tính toán các giá trị tổng hợp như tổng, trung bình, số lượng, etc.

Định nghĩa

Toán tử $group được sử dụng trong một aggregation pipeline (chuỗi gộp) để nhóm các tài liệu dựa trên một hoặc nhiều trường. Sau khi nhóm, bạn có thể thực hiện các phép toán tổng hợp trên các trường còn lại trong tài liệu.

Cú pháp

{
  $group: {
    _id: , // Trường để nhóm
    : { :  }, // Phép toán tổng hợp
    : { :  }, // Phép toán tổng hợp
    ...
  }
}

Trong đó:

  • _id: trường được sử dụng để xác định nhóm. Có thể là một trường cụ thể trong tài liệu hoặc một biểu thức.
  • field1, field2, ...: tên các trường mới muốn tạo trong nhóm, với là các toán tử tổng hợp.

Các toán tử tổng hợp phổ biến

  • $sum: Tính tổng các giá trị.
  • $avg: Tính trung bình cộng.
  • $min: Tìm giá trị nhỏ nhất.
  • $max: Tìm giá trị lớn nhất.
  • $push: Tạo mảng chứa tất cả các giá trị.
  • $addToSet: Tạo mảng chỉ chứa các giá trị duy nhất.

Ví dụ

1. Nhóm theo một trường và tính tổng

Xem xét một bộ sưu tập sales với cấu trúc như sau:

{
  "_id": 1,
  "product": "A",
  "amount": 100
},
{
  "_id": 2,
  "product": "B",
  "amount": 150
},
{
  "_id": 3,
  "product": "A",
  "amount": 200
}

Bây giờ, nếu bạn muốn nhóm các giao dịch theo sản phẩm và tính tổng số tiền cho từng sản phẩm, bạn có thể thực hiện truy vấn sau:

db.sales.aggregate([
  {
    $group: {
      _id: "$product",
      totalAmount: { $sum: "$amount" }
    }
  }
])

Kết quả sẽ trông như sau:

{
  "_id": "A",
  "totalAmount": 300
},
{
  "_id": "B",
  "totalAmount": 150
}

2. Nhóm theo nhiều trường

Nếu bạn muốn nhóm theo nhiều trường, bạn có thể sử dụng một đối tượng trong trường _id. Ví dụ:

db.sales.aggregate([
  {
    $group: {
      _id: { product: "$product", year: { $year: "$date" } },
      totalAmount: { $sum: "$amount" }
    }
  }
])

Trong ví dụ này, nếu bạn có trường date trong các tài liệu, bạn có thể nhóm theo sản phẩm và năm để tính tổng số tiền bán hàng cho từng sản phẩm theo từng năm.

Kết luận

Toán tử $group trong MongoDB là một công cụ mạnh mẽ để phân tích và tổng hợp dữ liệu. Bằng cách nhóm các tài liệu và thực hiện các phép toán tổng hợp, bạn có thể dễ dàng thu thập các thông tin quan trọng từ dữ liệu của mình. Hi vọng bài viết này đã giúp bạn hiểu rõ hơn về cú pháp và cách sử dụng $group trong MongoDB!