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

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


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

$$ROOT อ้างอิงถึงเอกสารราก (root document) คือ เอกสารระดับบนสุดที่กำลังถูกประมวลผลในขั้นตอน aggregation pipeline stage

มาสร้างคอลเล็กชันพร้อมเอกสารกันเถอะ

> 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") }

คำสั่งใช้ Group Accumulator operator $first กับ $$ROOT

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