哇,要解决这个问题变得异常令人沮丧,我花了数小时在SO和Google上找到解决方案,但无济于事。我需要知道(如果可能的话)在MongoDB中如何用另一个文档(第一个文档的子文档)递归更新文档,以便仅更新子文档中存在的文档中的字段。理想情况下,使用带有lodash / underscore的javascript Node猫鼬使事情变得花哨。
为简单起见,我在mongoDB中有这个现有文档:
Product { id: 1 count: 1, title: 'sample', array:[ { a: { A: "nestedField", B: ["123", "456"], C: { id: 'xyz', msgs: [ { msg: 'hello' }, { msg: 'world' } ] } }, b: { oPrice: "9.0" }, price: '10.0', img: "9072408.jpg", tags: [ "op", "ob", "os" ] } ] }
我必须使用以下结构对其进行更新
product { id: 1 count: 1, title: 'sample2', array:[ { a: { A: "nestedField 2", B: ["123", "456"], C: { id: 'xyz', msgs: [ { msg: 'hello' }, { msg: 'world 2' } ] } }, c: 'some new field', price: '10.0' } ] }
请注意其结构与原始结构相同,但仅某些字段需要更新,例如标题,数组[0] .a.A,数组[0] .a.C.msgs 而其他人则没有。计数,数组[0] .a.B,数组[0] .a.C.id,数组[0]。价格 并且数组值中有一个新字段c,因此也需要添加。
我尝试了以下操作,但是这代替了整个文档,而不是用其新值更新任何现有字段,并且删除了原始文档中未包含在子文档中的字段,例如img和标签。
updateOne: {
filter: { id : product.id },
update: { $set: product },
upsert: false
}