【mongoose】save方法报错
数据如下:
{
array: [
{
_id: 'aaa'
sub_array: [
{
_id: 'saaa',
name: 'aaa'
},
{...}
]
},
{...}
]
}
现在我要更新sub_array的name值:
Model.findOne({
'array._id': 'aaa'
},{'array.$': 1}).then(respon=> {
let checkdt = respon.array[0].sub_array.find((item)=> {
reruen item._id == 'saaa'
})
checkdt.name = 'new val'
respon.save().then(r=> res.send(r)).catch(er=> res.send(er))
})
结果报错:
{
"message": "For your own good, using `document.save()` to update an array which was selected using an $elemMatch projection OR populated using skip, limit, query conditions, or exclusion of the _id field when the operation results in a $pop or $set of the entire array is not supported. The following path(s) would have been modified unsafely:\n questions.0.sub_questions.1.score\n questions.0.sub_questions.1.title\nUse Model.update() to update these arrays instead.",
"name": "DivergentArrayError"
}
为什么会这样?我该怎么修改?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
搜一下其实有人问过的:https://stackoverflow.com/que...
mongoose的github上也对这个问题有描述:issues#1334
简单地说,你用
findOne
的时候用了投影{'array.$': 1}
,所以返回的文档中只有原始文档的一部分。而save
方法是把你给的文档原样存回去,这显然不是你想要的结果,因为会丢数据。举例:说白了,mongoose是在防止你自残,还是挺有节操的,业界良心。
你用的是mongoose?