Computer >> Máy Tính >  >> Lập trình >> MongoDB

Triển khai MongoDB Aggregate - thư giãn, nhóm và dự án?

$ Unwind trong MongoDB giải cấu trúc một trường mảng từ các tài liệu đầu vào để xuất ra một tài liệu cho mỗi phần tử.

$ group được sử dụng để nhóm các tài liệu đầu vào theo biểu thức _id được chỉ định và đối với mỗi nhóm riêng biệt, sẽ xuất ra một tài liệu.

$ project được sử dụng để chuyển các tài liệu có các trường được yêu cầu sang giai đoạn tiếp theo trong quy trình.

Hãy để chúng tôi tạo một bộ sưu tập với các tài liệu -

> db.demo238.insertOne(
...   {
...
...      "EmailId" : "John@gmail.com",
...      "details" : [
...         {
...            "Name" : "Bob",
...            "isActive" : true
...         }
...      ]
...   }
...);
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e4418e3f4cebbeaebec5152")
}
>
> db.demo238.insertOne(
...   {
...
...      "EmailId" : "Chris@gmail.com",
...      "details" : [
...         {
...            "Name" : "David"
...         }
...      ]
...   }
...);
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e4418e3f4cebbeaebec5153")
}
>
>
> db.demo238.insertOne(
...   {
...
...      "EmailId" : "Mike@gmail.com",
...      "details" : [
...         {
...            "Name" : "Carol",
...            "isActive" : true
...         }
...      ]
...   }
...);
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e4418e4f4cebbeaebec5154")
}

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.demo238.find().pretty();

Điều này sẽ tạo ra kết quả sau -

{
   "_id" : ObjectId("5e4418e3f4cebbeaebec5152"),
   "EmailId" : "John@gmail.com",
   "details" : [
      {
         "Name" : "Bob",
         "isActive" : true
      }
   ]
}
{
   "_id" : ObjectId("5e4418e3f4cebbeaebec5153"),
   "EmailId" : "Chris@gmail.com",
   "details" : [
      {
         "Name" : "David"
      }
   ]
}
{
   "_id" : ObjectId("5e4418e4f4cebbeaebec5154"),
   "EmailId" : "Mike@gmail.com",
   "details" : [
      {
         "Name" : "Carol",
         "isActive" : true
      }
   ]
}

Sau đây là truy vấn để triển khai MongoDB Aggregate - unwind, group and project -

> db.demo238.aggregate(
...   [
...      { "$match": { "details.isActive": true } },
...      { "$unwind": "$details" },
...      { "$match": { "details.isActive": true } },
...      { "$group": {
...         "_id": "$details.Name",
...         "active": { "$first": "$_id" }
...      }}
...   ],
...   function(err,result) {
...
...   }
...);

Điều này sẽ tạo ra kết quả sau -

{ "_id" : "Carol", "active" : ObjectId("5e4418e4f4cebbeaebec5154") }
{ "_id" : "Bob", "active" : ObjectId("5e4418e3f4cebbeaebec5152") }