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

以下是應用 Group Accumulator 運算子的查詢 −

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

更新於: 2020 年 5 月 15 日

115 次瀏覽

開啟您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.