如何将元素添加到嵌套在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
查找文档,按name
select项目,然后在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'); } );