获取计数并与 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()
})
}
代码尚未经过测试,我可能需要进行一些小的更改,但我希望这能让您了解如何实现您想要的功能。
我有一些架构如下。
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()
})
}
代码尚未经过测试,我可能需要进行一些小的更改,但我希望这能让您了解如何实现您想要的功能。