如何使用Mongoose Aggregation FrameWork对数组元素进行分组

我有以下Mongoose模式:

EmployeeSchema:

var EmployeeSchema = new Schema({ name : String, employeeDetailsId: { type: Schema.Types.ObjectId, ref: 'employeedetails' } }); 

EmployeeDetailSchema:

 var EmployeeDetailSchema = new Schema({ employeeId: { type: Schema.Types.ObjectId, ref: 'employee' }, statusId: { type: Schema.Types.ObjectId, ref: 'status' }, primarySkills: [ { type: Schema.Types.ObjectId, ref: 'skills' }] }); 

SkillsSchema:

 var SkillsSchema = new Schema({ name: { type: String, required: true } }); 

以下是在EmployeeDetails集合中保存的数据:

 /* 1 */ { "_id" : ObjectId("583fbbfe78854dd424f0523f"), "employeeId" : ObjectId("583f114e1cff44b7ab414dc1"), "statusId" : ObjectId("583ee05a1d5161941632091a"), "secondarySkills" : [], "primarySkills" : [], "__v" : 0 } /* 2 */ { "_id" : ObjectId("583ff108cfa71d942269b09b"), "employeeId" : ObjectId("583f114e1cff44b7ab414dc4"), "statusId" : ObjectId("583ee05a1d5161941632091a"), "secondarySkills" : [], "primarySkills" : [], "__v" : 0 } /* 3 */ { "_id" : ObjectId("5848c40599fa37d40a7e7392"), "employeeId" : ObjectId("583f114e1cff44b7ab414dc8"), "secondarySkills" : [ ObjectId("5838373072d7bab017488ba2") ], "primarySkills" : [ ObjectId("5848c3c299fa37d40a7e7390"), ObjectId("5848c3d599fa37d40a7e7391") ], "__v" : 0 } /* 4 */ { "_id" : ObjectId("5848c41699fa37d40a7e7393"), "employeeId" : ObjectId("583f114e1cff44b7ab414dc6"), "secondarySkills" : [], "primarySkills" : [ ObjectId("5838373072d7bab017488ba2"), ObjectId("5848c3c299fa37d40a7e7390"), ObjectId("5848c3d599fa37d40a7e7391") ], "__v" : 0 } 

UseCase:

当我想根据状态ID对EmployeeDetails集合进行分组时,我在Mongoose中使用了以下聚合:

 EmployeeDetailsModel.aggregate([ { $group: {_id: "$statusId", count: {$sum: 1}} } ]).exec(...); 

以类似的方式,我想基于primarySkills或secondarySkills,其中两个都是Skill ObjectID的数组。

我尝试了一些方法,但没有运气。 需要一些帮助。

所以如果你想得到一个显示有一定技能的员工名单的结果,$ unwind可能会有所帮助。

 db.emp.aggregate([{$unwind:"$primarySkills"},{$group:{"_id":"$primarySkills", "employees":{$push:"$employeeId"}}}]) 

结果如下:

 { "_id" : ObjectId("5848c3d599fa37d40a7e7391"), "employees" : [ ObjectId("583f114e1cff44b7ab414dc6"), ObjectId("583f114e1cff44b7ab414dc8") ] } { "_id" : ObjectId("5848c3c299fa37d40a7e7390"), "employees" : [ ObjectId("583f114e1cff44b7ab414dc6"), ObjectId("583f114e1cff44b7ab414dc8") ] } { "_id" : ObjectId("5838373072d7bab017488ba2"), "employees" : [ ObjectId("583f114e1cff44b7ab414dc6") ] } 

$ unwind文档 。