我正在尝试将一个对象推到下面深层嵌套的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' } }})
答案 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)
}
})