gpt4 book ai didi

node.js - 如何使用 Mongoose 聚合框架对数组元素进行分组

转载 作者:太空宇宙 更新时间:2023-11-03 22:46:06 25 4
gpt4 key购买 nike

我有以下 Mongoose 模式:

员工架构:

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

员工详细架构:

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'
}]
});

技能架构:

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
}

用例:

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

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

以类似的方式,我想根据 PrimarySkills 或 secondarySkills 进行分组,其中它们都是技能对象 ID 的数组。

我尝试了几种方法,但没有成功。需要一些帮助。

最佳答案

因此,如果您试图获得显示具有某种技能的员工列表的结果,$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 doc .

关于node.js - 如何使用 Mongoose 聚合框架对数组元素进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41053513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com