Đối với điều này, chỉ cần sử dụng MongoDB $ group. Trước tiên, hãy để chúng tôi tạo một bộ sưu tập với các tài liệu -
> db.demo16.insertOne({ ... "StudentName" : "Chris", ... "StudentSection" : "A", ... "StudentAge" : 23, ... "StudentMarks" : 47 ... } ... ); { "acknowledged" : true, "insertedId" : ObjectId("5e13827455d0fc6657d21f07") } > db.demo16.insertOne({ ... "StudentName" : "Bob", ... "StudentSection" : "B", ... "StudentAge" : 21, ... "StudentMarks" : 85 ... } ... ); { "acknowledged" : true, "insertedId" : ObjectId("5e13827555d0fc6657d21f08") } > db.demo16.insertOne( { ... "StudentName" : "Carol", ... "StudentSection" : "A", ... "StudentAge" : 26, ... "StudentMarks" : 97 ... } ... ); { "acknowledged" : true, "insertedId" : ObjectId("5e13827655d0fc6657d21f09") }
Sau đây là truy vấn để hiển thị tất cả các tài liệu từ một bộ sưu tập với sự trợ giúp của phương thức find () -
> db.demo16.find().pretty();
Điều này sẽ tạo ra kết quả sau -
{ "_id" : ObjectId("5e13827455d0fc6657d21f07"), "StudentName" : "Chris", "StudentSection" : "A", "StudentAge" : 23, "StudentMarks" : 47 } { "_id" : ObjectId("5e13827555d0fc6657d21f08"), "StudentName" : "Bob", "StudentSection" : "B", "StudentAge" : 21, "StudentMarks" : 85 } { "_id" : ObjectId("5e13827655d0fc6657d21f09"), "StudentName" : "Carol", "StudentSection" : "A", "StudentAge" : 26, "StudentMarks" : 97 }
Sau đây là truy vấn để triển khai nhóm và hoạt động riêng biệt cùng nhau -
> db.demo16.aggregate([{ ... $group : { ... _id : null, ... StudentName : { $addToSet : "$StudentName" }, ... StudentSection : { $addToSet : "$StudentSection" }, ... StudentMinimumAge : { $min : "$StudentAge" }, ... StudentMaximumAge : { $max : "$StudentAge" }, ... StudentMinimumMarks: { $min : "$StudentMarks" }, ... StudentMaximumMarks : { $max : "$StudentMarks" } ... } ... }]).pretty();
Điều này sẽ tạo ra kết quả sau -
{ "_id" : null, "StudentName" : [ "Carol", "Bob", "Chris" ], "StudentSection" : [ "B", "A" ], "StudentMinimumAge" : 21, "StudentMaximumAge" : 26, "StudentMinimumMarks" : 47, "StudentMaximumMarks" : 97 }