Đối với điều này, hãy sử dụng tổng hợp () cùng với $ group. Hãy để chúng tôi tạo một bộ sưu tập với các tài liệu -
> db.demo627.insertOne({id:101,"Name":"Chris","Marks":54}); { "acknowledged" : true, "insertedId" : ObjectId("5e9acb306c954c74be91e6b2") } > db.demo627.insertOne({id:102,"Name":"Bob","Marks":74}); { "acknowledged" : true, "insertedId" : ObjectId("5e9acb3c6c954c74be91e6b3") } > db.demo627.insertOne({id:101,"Name":"Chris","Marks":87}); { "acknowledged" : true, "insertedId" : ObjectId("5e9acb426c954c74be91e6b4") } > db.demo627.insertOne({id:102,"Name":"Mike","Marks":70}); { "acknowledged" : true, "insertedId" : ObjectId("5e9acb4b6c954c74be91e6b5") }
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.demo627.find();
Điều này sẽ tạo ra kết quả sau -
{ "_id" : ObjectId("5e9acb306c954c74be91e6b2"), "id" : 101, "Name" : "Chris", "Marks" : 54 } { "_id" : ObjectId("5e9acb3c6c954c74be91e6b3"), "id" : 102, "Name" : "Bob", "Marks" : 74 } { "_id" : ObjectId("5e9acb426c954c74be91e6b4"), "id" : 101, "Name" : "Chris", "Marks" : 87 } { "_id" : ObjectId("5e9acb4b6c954c74be91e6b5"), "id" : 102, "Name" : "Mike", "Marks" : 70 }
Sau đây là truy vấn tính tổng với nhóm MongoDB theo nhiều cột để tính tổng số điểm có id trùng lặp -
> db.demo627.aggregate([ ... { "$group": { ... "_id": { ... "id" : "$id", .. . "Name":"$Name" ... }, ... "Marks": { "$sum": "$Marks" } ... }}, ... { "$group": { ... "_id": { ... "id" : "$_id.id", ... "Name": "$_id.Name" ... }, ... ... "TotalMarks": { "$sum": "$Marks" } ... }} ... ], { "allowDiskUse": true } ... );
Điều này sẽ tạo ra kết quả sau -
{ "_id" : { "id" : 101, "Name" : "Chris" }, "TotalMarks" : 141 } { "_id" : { "id" : 102, "Name" : "Bob" }, "TotalMarks" : 74 } { "_id" : { "id" : 102, "Name" : "Mike" }, "TotalMarks" : 70 }