[英]How to get access to entire subdocument(array of objects within array of objects) using moongoose?
我的架构:
var schoolSchema = new mongoose.Schema({
name: String,
classes:[
{
c_name:String,
c_strn:String,
students:[
{s_name:String,
s_roll:String,
s_address:String
}
]
}
],
});
var school = mongoose.model('school',schoolSchema);
示例文档:
var sainik = new school({name:'sain',
classes:
[
{
c_name:'1(one)',
c_strn:'100',
students:[
{
s_name:"Leo",
s_roll:"17",
s_address:"strt24",
},
{
s_name:"Kyle",
s_roll:"18",
s_address:"strt24",
}
]//array of students
}
]//array of classes
});
sainik.save().then(()=>console.log("Save it"));
代码 :
app.get('/home/:id/:cid',function(req, res){
school.find().exec(function(err,data){
if (err){
console.log(err);
}
else{
console.log(data);
res.render("classDet",{data:data});
}
})
});
在这里,我需要知道如何使用班级 ID 访问各个班级并将学生数组打印为“classDet”中的列表基本上我正在创建一个学校管理系统,其中将有许多班级和班级内部将是学生名单。 我只想在父类访问时打印每个类中的所有学生。
您可以尝试以下任一方法:
app.get('/home/:id/:cid', function (req, res) {
school.find({ id: id, 'classes.c_id': cid }, { _id: 0, 'classes.c_id.$.students': 1 }).lean().exec(function (err, data) {
if (err) {
console.log(err);
}
else {
console.log(data);
res.render("classDet", { data: data });
}
})
})
app.get('/home/:id/:cid', function (req, res) {
school.aggregate([{ $match: { id: id } }, { $unwind: '$classes' }, { $match: { 'classes.c_id': cid } }, { $project: { _id: 0, students: '$classes.students' } }]).exec(function (err, data) {
if (err) {
console.log(err);
}
else {
console.log(data);
res.render("classDet", { data: data });
}
})
})
注意:这两个结果会略有不同,您可以对其进行测试并从中选择一个,另外请记住,如果正在针对数据库中的_id
搜索请求中的id
,那么您需要将id
字符串转换为ObjectId()
在查询中使用它之前。 此外,我们在.lean()
中使用.lean()
将.find()
文档转换为 Js 对象,以便在代码中处理数据时访问数据中的键。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.