无法使用猫鼬找到子文档

时间:2020-04-26 18:17:51

标签: node.js mongodb mongoose mongoose-schema

我想找到具有id的子文档并返回该子文档,而不是父文档,我的架构如下:

var coursesSchema = new mongoose.Schema({
 coursename:{type:String}
});

var parentSchema = new mongoose.Schema({
 courses:[coursesSchema]
});

var Parent= mongoose.model('parent', parentSchema );
module.exports = Parent;

let data = Parent.courses.id(_id);

正如我尝试使用.id来找到子文档的文档中给出的那样,它抛出错误,提示无法读取未定义的属性'id'

经过大量搜索发现this question之后,我尝试了相同的操作,显然它也返回了相同的错误。

let data = Parent['courses'].id(_id);

请帮助我,我无法接受它not

2 个答案:

答案 0 :(得分:0)

为了获取子文档,您必须执行以下操作:

  1. 查找文档
  2. 引用子文档属性

在您的情况下,您已经定义了一个模型。基于此模型,您需要:

Parent.findOne({ _id: ObjectId("abcd12345678901234567890") }, function(err, doc) {
  let subDocument = doc.courses;
  ...
}

出现“未定义”错误的原因是因为courses子文档没有名为id的字段。它只有一个名为coursename的字段。

答案 1 :(得分:0)

我们可以使用@KunalMukherjee在评论Here is a quick example to do so中指出的聚合操作来解决此问题