數(shù)據(jù)如下:
{
array: [
{
_id: 'aaa'
sub_array: [
{
_id: 'saaa',
name: 'aaa'
},
{...}
]
},
{...}
]
}
現(xiàn)在我要更新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))
})
結(jié)果報(bào)錯(cuò):
{
"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"
}
為什么會(huì)這樣?我該怎么修改?
搜一下其實(shí)有人問過的:https://stackoverflow.com/que...
mongoose的github上也對(duì)這個(gè)問題有描述:issues#1334
簡單地說,你用findOne
的時(shí)候用了投影{'array.$': 1}
,所以返回的文檔中只有原始文檔的一部分。而save
方法是把你給的文檔原樣存回去,這顯然不是你想要的結(jié)果,因?yàn)闀?huì)丟數(shù)據(jù)。舉例:
rs0:PRIMARY> db.test.insert({a: 1, b: 2})
WriteResult({ "nInserted" : 1 })
rs0:PRIMARY> db.test.find()
{ "_id" : ObjectId("5a741072979a928dbe90341a"), "a" : 1, "b" : 2 }
rs0:PRIMARY> var doc = db.test.findOne({}, {a: 1})
rs0:PRIMARY> db.test.save(doc)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
rs0:PRIMARY> db.test.find()
{ "_id" : ObjectId("5a741072979a928dbe90341a"), "a" : 1 }
說白了,mongoose是在防止你自殘,還是挺有節(jié)操的,業(yè)界良心。
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團(tuán)創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機(jī)構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團(tuán),成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。