在mongodb上更新深度数据数组

时间:2019-08-19 22:13:31

标签: node.js mongodb mongoose

我正在尝试将一个对象推到下面深层嵌套的checklist数组中:

{
 // User
  _id : "id",
  days : [
     {
       _id : "id"
       day : "6",
       tasks: [
          {
            _id : "id",
            name : "todo"
            types : {
              checklist : [] // i want to push objects here
              notes : []
            }
          },
          ....
       ]
     },
     ....
  ]
}

这是我尝试过但失败的内容...我的猜测是$运算符不应位于该位置:

User.update({_id : user._id , "days.tasks.name": 'todo' } ,{ $push : { 'days.tasks.$.types.checklist' : { data : 'hello World' } }})

2 个答案:

答案 0 :(得分:0)

或者您可以重新设计数据库并制作一些子模型,并使用ObjectId进行引用。

答案 1 :(得分:0)

我找到了一种解决方案,该解决方案基本上是使用唯一ID查找特定任务的索引:

router.patch('/user/updatetask', auth , async (req,res)=>{
    const user = req.user
    const dayIndex = user.days.indexOf(user.days.find(day => day.day == req.body.day))
    const taskIndex = user.days[dayIndex].tasks.indexOf(user.days[dayIndex].tasks.find(task => task._id == req.body.task_id))
    var obj = {}
        obj[`days.${dayIndex}.tasks.${taskIndex}.types.checklist`] = 'no'
    try {

        await  User.updateOne({_id : user._id } ,{ $push :obj})
        res.status(201).send(user)
    } catch(e) {
        res.status(400).send(e)
    }
})