使用Node.js和mongoose更新嵌套的子文档

我试图保存细节,以我的嵌套子文件tertiary

 module.exports = mongoose.model('Todo', { title : String, image:String, bgimage:String, secondary:[Secondary] }); var Secondary = new mongoose.Schema({ title : String, image:String, bgimage:String, tertiary :[Tertiary] }); var Tertiary = new mongoose.Schema({ title : String, description:String, image:String }); 

下面是保存我的tertiary数据的代码。 我有我的主要对象ID以及次要对象ID。

 Todo.findById(fields.primaryid, function (err, secondary_todo) { if (!err) { console.log("---Inside not errot----"); console.log(fields.secondaryRefid); secondary_todo.secondary.findById(fields.secondaryRefid, function (err, tertiary_todo) { console.log("---In Secondary data----"); console.log(tertiary_todo); if (!err) { tertiary_todo.tertiary.push({ _id: mongoose.Types.ObjectId(), title : fields.title, image : fields.file, description : fields.description, }); } tertiary_todo.save(); }); } }); 

我在terminal上的错误是

 /......./.../..../lib/utils.js:419 throw err; ^ TypeError: Object [object Object],[object Object],[object Object] has no method 'findById' at Promise.<anonymous> 

任何人都可以快速解决。 我试了一下,

您可能需要在描述子文档的文档中阅读此页面,也可以使用用于查找子文档的特殊id()方法来提供其id。
所以不要在子文档上调用findById

 secondary_todo.secondary.findById(fields.secondaryRefid, function (err, tertiary_todo) { ... 

使用像这样的id

 var tertiary_todo = secondary_todo.secondary.id(fields.secondaryRefid); ... 

更新:另一个问题可能是您的架构设置在您定义之前使用您的子架构时中断。 像这样对他们重新sorting

 var Tertiary = new mongoose.Schema({ title : String, description:String, image:String }); var Secondary = new mongoose.Schema({ title : String, image:String, bgimage:String, tertiary :[Tertiary] }); module.exports = mongoose.model('Todo', { title : String, image:String, bgimage:String, secondary:[Secondary] });