我有一些像下面這樣的模式。
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,
}]
感謝提前
uj5u.com熱心網友回復:
您可以在貓鼬中使用聚合。
首先更改您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()
})
}
該代碼尚未經過測驗,我可能需要進行一些小的更改,但我希望這能提供有關如何實作您想要的功能的想法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/386974.html
上一篇:MongoDB查找連接陣列
