Cách nhóm sau khi thư giãn MongoDB

Toán tử giai đoạn $group MongoDB nhóm các tài liệu theo một số biểu thức được chỉ định và nhóm tài liệu cho từng nhóm riêng biệt. Trường _id trong tài liệu đầu ra chứa nhóm riêng biệt theo khóa. Các tài liệu đầu ra cũng có thể chứa các trường được tính toán chứa các giá trị của một số biểu thức bộ tích lũy được nhóm theo trường _id của $group. Toán tử này không đặt hàng các tài liệu đầu ra của nó

cú pháp

{ $group: { _id: , : {  :  }, .. } }

 

Những điểm cần nhớ

  • Trường _id là bắt buộc;
  • The rest of the fields eligible to be computed are optional and computed using the operators.
  • The _id and the expressions can accept any valid expression.

Hóa đơn lấy mẫu

{
        "_id" : 1,
        "item" : "doz",
        "qty" : 20,
        "rate" : 10,
        "inv_date" : "02/02/2014"
}
{
        "_id" : 2,
        "item" : "sam",
        "qty" : 15,
        "rate" : 8,
        "inv_date" : "05/12/2014"
}
{
        "_id" : 3,
        "item" : "amp",
        "qty" : 25,
        "rate" : 8,
        "inv_date" : "07/02/2014"
}
{
        "_id" : 4,
        "item" : "doz",
        "qty" : 20,
        "rate" : 10,
        "inv_date" : "02/02/2014"
}
{
        "_id" : 5,
        "item" : "amp",
        "qty" : 10,
        "rate" : 8,
        "inv_date" : "05/12/2014"
}
{
        "_id" : 6,
        "item" : "doz",
        "qty" : 30,
        "rate" : 10,
        "inv_date" : "13/04/2014"
}
{
        "_id" : 7,
        "item" : "sam",
        "qty" : 15,
        "rate" : 8,
        "inv_date" : "05/12/2014"
}
{
        "_id" : null,
        "item" : "mks",
        "qty" : 10,
        "rate" : 20,
        "inv_date" : "17/12/2014"
}

Ví dụ 1. nhóm $

Ví dụ sau nhóm theo trường ngày lập hóa đơn và hiển thị tổng chi phí, số lượng trung bình và số lượng hóa đơn trong cùng một ngày

db.invoice.aggregate(
   [
      {
        $group : {_id : "$inv_date",
           totalCost: { $sum: { $multiply: [ "$rate", "$qty" ] } },
           avgQty: { $avg: "$qty" },
           count: { $sum: 1 }
        }
     }
  ]
).pretty();

đầu ra

{ "_id" : "17/12/2014", "totalCost" : 200, "avgQty" : 10, "count" : 1 }
{ "_id" : "13/04/2014", "totalCost" : 300, "avgQty" : 30, "count" : 1 }
{
        "_id" : "05/12/2014",
        "totalCost" : 320,
        "avgQty" : 13.333333333333334,
        "count" : 3
}
{ "_id" : "07/02/2014", "totalCost" : 200, "avgQty" : 25, "count" : 1 }
{ "_id" : "02/02/2014", "totalCost" : 400, "avgQty" : 20, "count" : 2 }

Ở đây từ kết quả cho thấy rằng, tài liệu cho trường ngày lập hóa đơn đã được nhóm lại và hiển thị tổng chi phí, số lượng trung bình và số lượng hóa đơn được thực hiện cho ngày đó

Ví dụ-2. $group trên nhiều khóa

Ví dụ sau nhóm theo ngày lập hóa đơn, sau đó theo trường mục và hiển thị tổng chi phí, số lượng trung bình và số lượng hóa đơn trong cùng một ngày

db.invoice.aggregate(
   [
      {
        $group : {_id : {inv_date : "$inv_date",item : "$item"},
           totalCost: { $sum: { $multiply: [ "$rate", "$qty" ] } },
           avgQty: { $avg: "$qty" },
           count: { $sum: 1 }
        }
     }
  ]
).pretty();

đầu ra

{
        "_id" : {
                "inv_date" : "17/12/2014",
                "item" : "mks"
        },
        "totalCost" : 200,
        "avgQty" : 10,
        "count" : 1
}
{
        "_id" : {
                "inv_date" : "13/04/2014",
                "item" : "doz"
        },
        "totalCost" : 300,
        "avgQty" : 30,
        "count" : 1
}
{
        "_id" : {
                "inv_date" : "05/12/2014",
                "item" : "amp"
        },
        "totalCost" : 80,
        "avgQty" : 10,
        "count" : 1
}
{
        "_id" : {
                "inv_date" : "07/02/2014",
                "item" : "amp"
        },
        "totalCost" : 200,
        "avgQty" : 25,
        "count" : 1
}
{
        "_id" : {
                "inv_date" : "05/12/2014",
                "item" : "sam"
        },
        "totalCost" : 240,
        "avgQty" : 15,
        "count" : 2
}
{
        "_id" : {
                "inv_date" : "02/02/2014",
                "item" : "doz"
        },
        "totalCost" : 400,
        "avgQty" : 20,
        "count" : 2
}

Từ kết quả trên cho thấy, chứng từ của hóa đơn ngày 12/05/2014 và ngày 02/02/2014 có cùng một mặt hàng, hai trường này gộp lại tạo thành một nhóm

Ví dụ-3. $group trên nhiều khóa với $match

Ví dụ sau nhóm theo ngày lập hóa đơn, sau đó theo trường mục và hiển thị tổng chi phí, số lượng trung bình và số lượng hóa đơn trong cùng một ngày đối với những chứng từ có ngày lập hóa đơn là 12/05/2014

db.invoice.aggregate(
   [
    { 
	$match : {inv_date : "05/12/2014"}
    },
      {
        $group : {_id : {inv_date : "$inv_date",item : "$item"},
           totalCost: { $sum: { $multiply: [ "$rate", "$qty" ] } },
           avgQty: { $avg: "$qty" },
           count: { $sum: 1 }
        }
     }
  ]
).pretty();

đầu ra

{
        "_id" : {
                "inv_date" : "05/12/2014",
                "item" : "amp"
        },
        "totalCost" : 80,
        "avgQty" : 10,
        "count" : 1
}
{
        "_id" : {
                "inv_date" : "05/12/2014",
                "item" : "sam"
        },
        "totalCost" : 240,
        "avgQty" : 15,
        "count" : 2
}

Từ kết quả trên cho thấy, chứng từ lập hóa đơn ngày 12/05/2014 có 3 hóa đơn nhưng cùng một tổ hợp mặt hàng đã tạo thành một nhóm

Ví dụ-4. $group giá trị riêng biệt

Thao tác tổng hợp sau đây sử dụng giai đoạn $group để nhóm ngày lập hóa đơn của các tài liệu theo mục

Thư giãn trong tổng hợp là gì?

Ví dụ. thư giãn $ . Ở đây từ kết quả cho thấy rằng, mỗi tài liệu giống hệt với tài liệu đầu vào ngoại trừ giá trị của trường kích thước chứa giá trị từ mảng kích thước ban đầu. used to output a document for each element in the sizes array. Here from the result it shows that, each document is identical to the input document except for the value of the sizes field that contain the value from the original sizes array.

Làm cách nào bạn có thể nhóm theo một giá trị cụ thể trong MongoDB?

Chúng tôi có thể nhóm theo một trường cũng như nhiều trường từ bộ sưu tập, chúng tôi có thể sử dụng toán tử $group trong MongoDB để nhóm các trường từ bộ sưu tập and returns the new document as result. We are using $avg, $sum, $max, $min, $push, $last, $first and $addToSet operator with group by in MongoDB.

$root trong MongoDB là gì?

$$ROOT. Biến $$ROOT chứa tài liệu nguồn cho nhóm .

Toán tử nào có thể đảo ngược tác động của thao tác thư giãn kép?

Mở tài liệu này ra hai lần sẽ có 6 tài liệu. Bây giờ để kết hợp chúng lại, bạn có thể sử dụng toán tử $push .