Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Truy vấn nhóm có cấu trúc trong MongoDB hiển thị kết quả với trường đếm mới

Để thực hiện truy vấn nhóm có cấu trúc, hãy sử dụng $group trong aggregate(). Toán tử $group nhóm các tài liệu đầu vào theo biểu thức _id chỉ định và xuất ra một tài liệu cho mỗi nhóm riêng biệt.

Tạo collection với tài liệu mẫu:

> db.demo534.insertOne({_id:10,"ProductId":100,"ProductName":"Product-1"});
{ "acknowledged" : true, "insertedId" : 10 }
> db.demo534.insertOne({_id:11,"ProductId":100,"ProductName":"Product-2"});
{ "acknowledged" : true, "insertedId" : 11 }
> db.demo534.insertOne({_id:12,"ProductId":101,"ProductName":"Product-1"});
{ "acknowledged" : true, "insertedId" : 12 }

Hiển thị tất cả tài liệu:

> db.demo534.find();

Kết quả:

{ "_id" : 10, "ProductId" : 100, "ProductName" : "Product-1" }
{ "_id" : 11, "ProductId" : 100, "ProductName" : "Product-2" }
{ "_id" : 12, "ProductId" : 101, "ProductName" : "Product-1" }

Truy vấn aggregate nhóm theo ProductId và ProductName, sau đó nhóm lại theo ProductId để đẩy tên sản phẩm và số lượng vào mảng:

> db.demo534.aggregate(
... {
...     $group:
...     {
...         _id:
...         {
...             productName: "$ProductName",
...             productId: "$ProductId"
...         },
...         count:
...         {
...             $sum: 1
...         }
...     }
... },
... {
...     $group:
...     {
...         _id: "$_id.productId",
...         itemCounts:
...         {
...             $push:
...             {
...                 productName: "$_id.productName",
...                 count: "$count"
...             }
...         }
...     }
... })

Kết quả:

{ "_id" : 101, "itemCounts" : [ { "productName" : "Product-1", "count" : 1 } ] }
{ "_id" : 100, "itemCounts" : [ { "productName" : "Product-2", "count" : 1 }, { "productName" : "Product-1", "count" : 1 } ] }