Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

ใช้ Group Accumulator Operator $first บนตัวแปรระบบ $$ROOT เพื่อส่งคืนการอ้างอิงไปยังเอกสารรูทหรือไม่


ตัวสะสมคือตัวดำเนินการที่คงสถานะของตนไว้ในขณะที่เอกสารดำเนินการผ่านไปป์ไลน์

$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 }
}