MongoDB聚合与数组内部相等吗?

为此,将aggregate()与$group一起使用。让我们创建一个包含文档的集合-

> db.demo578.insertOne(
...    {
...       "_id" : 1,
...       "Info" : {
...          "firstName" : "Chris",
...          "lastName" : "Brown"
...       },
...
...       "achievements" : [
...          {
...             "winner" : "10th",
...             "year" : 2010,
...             "by" : "School"
...          },
...          {
...             "winner" : "12th",
...             "year" : 2012,
...             "by" : "School"
...          },
...          {
...             "winner" : "Good Rank",
...             "year" : 2012,
...             "by" : "College"
...          }
...       ]
...    }
... );
{ "acknowledged" : true, "insertedId" : 1 }

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

> db.demo578.find();

这将产生以下输出-

{ "_id" : 1, "Info" : { "firstName" : "Chris", "lastName" : "Brown" }, "achievements" : [
   { "winner" : "10th", "year" : 2010, "by" : "School" },
   { "winner" : "12th", "year" : 2012, "by" : "School" },
   { "winner" : "Good Rank", "year" : 2012, "by" : "College" }
] }

以下是对数组内具有相等聚合的查询-

> db.demo578.aggregate([
...    {
...       "$unwind": "$achievements"
...    },
...    {
...       "$group": {
...          "_id": {
...             "year": "$achievements.year",
...             "firstName": "$Info.firstName",
...             "lastName": "$Info.lastName"
...          },
...          "count": { "$sum": 1 },
...          "AchievementName": { "$push": "$Info" }
...       }
...    },
...    {
...       "$match": { "count": 2 }
...    },
...    {
...       "$project": {
...          "_id": 0,
...          "year": "$_id.year",
...          "AchievementName": 1,
...          "count": 1
...       }
...    }
... ]).pretty();

这将产生以下输出-

{
   "count" : 2,
   "AchievementName" : [
      {
         "firstName" : "Chris",
         "lastName" : "Brown"
      },
      {
         "firstName" : "Chris",
         "lastName" : "Brown"
      }
   ],
   "year" : 2012
}