ตัวสะสมคือตัวดำเนินการที่คงสถานะของตนไว้ในขณะที่เอกสารดำเนินการผ่านไปป์ไลน์
$ROOT อ้างอิงเอกสารรูท กล่าวคือ เอกสารระดับบนสุด กำลังถูกประมวลผลในขั้นตอนไปป์ไลน์การรวม
ให้เราสร้างคอลเลกชันที่มีเอกสาร -
> db.demo582.insertOne({FirstName:"Chris",Age:21,createDate:new ISODate("2020-01-10")});{ "acknowledged" : true, "insertedId" : ObjectId("5e91ce41fd2d90c177b5bcbd") } > db.demo582.insertOne({FirstName:"Chris",Age:21,createDate:new ISODate("2020-04-21")});{ "acknowledged" : true, "insertedId" : ObjectId("5e91ce4ffd2d90c177b5bcbe") } > db.demo582.insertOne({FirstName:"Chris",Age:22,createDate:new ISODate("2020-02-11")});{ "acknowledged" : true, "insertedId" : ObjectId("5e91ce59fd2d90c177b5bcbf") } > db.demo582.insertOne({FirstName:"Chris",Age:22,createDate:new ISODate("2020-01-12")});{ "acknowledged" : true, "insertedId" : ObjectId("5e91ce6efd2d90c177b5bcc0") }
แสดงเอกสารทั้งหมดจากคอลเล็กชันโดยใช้วิธี find() -
> db.demo582.find();
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -
{ "_id" : ObjectId("5e91ce41fd2d90c177b5bcbd"), "FirstName" : "Chris", "Age" : 21, "createDate" : ISODate("2020-01-10T00:00:00Z") } { "_id" : ObjectId("5e91ce4ffd2d90c177b5bcbe"), "FirstName" : "Chris", "Age" : 21, "createDate" : ISODate("2020-04-21T00:00:00Z") } { "_id" : ObjectId("5e91ce59fd2d90c177b5bcbf"), "FirstName" : "Chris", "Age" : 22, "createDate" : ISODate("2020-02-11T00:00:00Z") } { "_id" : ObjectId("5e91ce6efd2d90c177b5bcc0"), "FirstName" : "Chris", "Age" : 22, "createDate" : ISODate("2020-01-12T00:00:00Z") }
ต่อไปนี้เป็นแบบสอบถามเพื่อใช้ตัวดำเนินการกลุ่มสะสม -
> db.demo582.aggregate([ ... { ... "$group": { ... "_id": "$FirstName", ... "MaximumDate": { ... "$max": "$createDate" ... }, ... "count": { ... "$sum": 1 ... }, ... "details": { ... "$first": "$$ROOT" ... } ... } ... }, ... { ... "$project": { ... "MaximumDate": 1, ... "count": 1, ... "details": { ... "_id": "$_id", ... "FirstName": "$details.FirstName", ... "Age" : "$details.Age", ... } ... } ... } ... ])
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -
{ "_id" : "Chris", "MaximumDate" : ISODate("2020-04-21T00:00:00Z"), "count" : 4, "details" : { "_id" : "Chris", "FirstName" : "Chris", "Age" : 21 } }