获取计数并与 mongoose 中的响应合并

get count and merge with response in mongoose

我有一些架构如下。

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

var alertSchema = new Schema({
   student_id: {
        type: Schema.Types.ObjectId,
        ref: 'student',
        required: true
    },
    name:{
        type: String,
        required: true
    },
type:{
        type: String,
        required: true
    },
})

我需要通过 student_id 获取警报计数并将其与学生详细信息合并。 结果应该如下所示

[{
    "_id": "61b2e66ddecb23132cc9641c",            
    "name": "studentname1",
    "alertcount": 100,
},
{
    "_id": "61b2e66ddecb23132cc9641c",            
    "name": "studentname2",
    "alertcount": 50,
}]

感谢提前

您可以在 mongoose 中使用聚合。

首先更改您的 StudentSchema 以包含 alertCount :

var studentSchema = new Schema({
    name:{
        type: String,
        required: true
    },
    alertCount : {type : Number , default : 0}
});

然后在警报模型上使用聚合:

let alertCounts = Alert.aggregate([
   {$match : {name : student.name }}, // filters all the alerts where name is equal to a particular student's name from Student model
   {$count : "alertCount"}
])

这适用于一名学生。您必须将其应用于数据集中的每个学生。您可以使用 map 函数来实现。

Student.find({})
.then(students=>{
  students.map(student=>{
     let alertCounts = Alert.aggregate([
        {$match : {name : student.name }},
        {$count : "alertCount"}
     ])
     student.alertCount = alertCounts.alertCount;
     student.save()
  })
}

代码尚未经过测试,我可能需要进行一些小的更改,但我希望这能让您了解如何实现您想要的功能。