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

时间:2016-04-24 13:58:44

标签: node.js mongodb 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选择项目,然后在tasks数组中添加新任务。做这个的最好方式是什么?现在我尝试使用findOne来查看我是否正在查询正确的位置

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

    console.log(data);
  }
);

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

2 个答案:

答案 0 :(得分:3)

试试这个

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

$ in update作为位置运算符,用于获取父数组的位置

答案 1 :(得分:1)

我找到了解决方案

go()