使用聚合管道在MongoDB中获取记录

MongoDB聚合管道具有阶段。每个阶段在文档通过管道时都会对其进行转换。

首先让我们创建一个包含文档的集合-

> db.demo218.insertOne({"Name":"Chris","Branch":"CS",Marks:[65,78,36,90]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e3e5f4903d395bdc2134712")
}
> db.demo218.insertOne({"Name":"David","Branch":"ME",Marks:[56,45,42,51]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e3e5f6203d395bdc2134713")
}
> db.demo218.insertOne({"Name":"Chris","Branch":"CS",Marks:[78,65,89]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e3e5f6c03d395bdc2134714")
}

find()方法的帮助下显示集合中的所有文档-

db.demo218.find();

这将产生以下输出-

"_id" : ObjectId("5e3e5f4903d395bdc2134712"), "Name" : "Chris""Branch" : "CS""Marks" : [ 65783690 ] }
{ "_id" : ObjectId("5e3e5f6203d395bdc2134713"), "Name" : "David""Branch" : "ME""Marks" : [ 56454251 ] }
{ "_id" : ObjectId("5e3e5f6c03d395bdc2134714"), "Name" : "Chris""Branch" : "CS""Marks" : [ 786589 ] }

以下是对聚合管道的查询-

> db.demo218.aggregate([
...   { "$unwind""$Marks" },
...   { "$match":
...      {
...         "Branch""CS",
...         "Marks": { "$gt"88 }
...      }
...   },
...   { "$group":
...      {
...         "_id""$_id",
...         "Branch": { "$first""$Branch" },
...         "Marks": { "$first""$Marks" }
...      }
...   }
...])

这将产生以下输出-

"_id" : ObjectId("5e3e5f6c03d395bdc2134714"), "Branch" : "CS""Marks" : 89 }
{ "_id" : ObjectId("5e3e5f4903d395bdc2134712"), "Branch" : "CS""Marks" : 90 }