我的架构:

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”中的列表基本上我正在创建一个学校管理系统,其中将有许多班级和班级内部将是学生名单。 我只想在父类访问时打印每个类中的所有学生。

#1楼 票数:0 已采纳

您可以尝试以下任一方法:

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

测试: MongoDB-Playground

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

测试: MongoDB-Playground

注意:这两个结果会略有不同,您可以对其进行测试并从中选择一个,另外请记住,如果正在针对数据库中的_id搜索请求中的id ,那么您需要将id字符串转换为ObjectId()在查询中使用它之前。 此外,我们在.lean()中使用.lean().find()文档转换为 Js 对象,以便在代码中处理数据时访问数据中的键。

  ask by BestOFBest translate from so

未解决问题?本站智能推荐:

1回复

NodeJs和Moongoose:如何循环进入对象数组并删除特定对象,然后更新整个文档

我的文档架构如下: 因此,例如在数据库中,一个文档具有多个图像,具有单个图像类别。 我想要做的是我想从imgDetails数组中删除一个对象。 让我更准确地解释我的问题: imgDetails是一个数组说明:我想在 imgDetails 中循环,然后查找(其中 imgageUrl === req.b
1回复

在Moongoose(MongoDB)中按嵌入式引用数组查找文档

假设我有以下收集模式 如何使用terminal.ip = '10 .0.0.1'查找所有WayPoint 我没有运气就尝试了以下方法... 整个集合被退回 更新-进展? 我认为我在以下代码方面取得了一些进展,因为它现在仅显示[object]用于匹配子文档,而null显示不匹配
1回复

通过数组中的对象字段查找文档

我有一个演出模式,我只想在演出中获得可用的门票。 我需要查找所有具有availableTickets> 0的文档,并仅使用show._id和show.title获得此子文档。 我该怎么办? 预期结果
1回复

如何更新猫鼬文档对象数组中的对象?

我的用户架构是这样的 我想用特定的 id 更新一些事务字段。 但没有发生。 我尝试了回答Mongoose,更新对象数组中的值这个问题的解决方案。 可能是我的_id是ObjectId类型,而来自我的请求的 id 是 String? 那么我该如何解决这个问题呢? 我的代码是这样的,但仍然出现错误user
1回复

如何更新子文档并删除子文档中数组的单个对象?

这是我所拥有的对象: 我想删除注释的子文档,其中user_id(58edd98d40627c492c8689c5)
1回复

猫鼬填充增加整个对象数组

我正在尝试开始保存用户的统计信息(对于不和谐的bot),例如命令用法等。 我想将所有内容保存在mongodb 。 基本上,我正在尝试从可节省用户命令使用率的数组中完成定期更新db的功能,然后在数据库上更新信息后清除/擦除。 我的架构如下: 老实说,关于一次更新所有内容,我不知道从何
2回复

MongodbQuery用于过滤文档中嵌套的对象数组

我有以下文件 第一次查询 在这里,我想从friends数组中获取userId,其状态等于“ACCEPT”。 即 第二个查询 之后,我必须对同一个集合进行另一个查询,以获取第一个查询中返回的每个用户标识的详细信息。 最终查询将返回[5a88398b9108bf1c48a1a
1回复

在mongodb子文档中获取元素的索引,该文档是对象数组

我有一个像这样的mongodb示例对象, } celebParticipants数组可能存储了成千上万个对象。 如果我想从用户B的celebParticipants数组中获取用户A的索引,那么仅使用用户参数(即ObjectId)也是实现上述目标的最佳方法是什么,它也是与上述相同集合的