如何将元素添加到嵌套在Mongoose的另一个数组中的数组?

我还有一个关于mongoose的问题。 这次我想更新文档中其他数组内的数组元素。 它的结构看起来像这样

{ "_id" : ObjectId("5702e0c732faf57c7bb9ebe9"), "email" : "john@doe.me", "projects" : [ { "name" : "inbox", "title" : "Inbox", "tasks" : [ { "id" : "1", "text" : "First task", "labels" : [ "home", "phone" ], "dueDate" : "2016-03-18T11:10:00", "created" : "2016-03-10T10:10:00", "completed" : false } ] }, { "name" : "work", "title" : "Work", "tasks" : [ { "id" : "4", "text" : "Fourth", "labels" : [ "home", "phone" ], "dueDate" : "2016-03-18T11:10:00", "created" : "2016-03-10T10:10:00", "completed" : false } ] } ] } 

我想通过_id查找文档,按nameselect项目,然后在tasks数组内添加新的任务。 做这个的最好方式是什么? 现在我试图用findOne来查看我是否在正确的位置查询

 User.findOne( { _id: Mongoose.Types.ObjectId(userId), 'projects.name': data.project }, (err, data) => { if (err) { throw err; } console.log(data); } ); 

但它返回数组中的所有项目,我不知道如何select我正在寻找的项目,并将元素添加到tasks数组。

尝试这个

 User.update({_id:ObjectId(userId),'projects.name': data.project},{$push:{'projects.$.tasks':{yourTaskObject}}}) 

$ in update作为位置操作符来获取父数组的位置

我find了解决scheme

 User.update( { _id: Mongoose.Types.ObjectId(userId), 'projects.name': data.project }, { $push: { 'projects.$.tasks': data.task } }, (err, data) => { if (err) { throw err; } return reply('success'); } );