繁体   English   中英

更新 3 层嵌套数组 mongoose

[英]Updating a 3 levels nested array mongoose

我正在尝试使用 mongoose 更新这个 mongdb 嵌套数组,但没有运气,我把所有尝试过的版本都放在一起,也许你可以连接我正在使用的点 findOneAndUpdate 甚至可以更新这么深的项目吗?

 // Input from Front-End taking in to account that all the ids are static for now to simplyfy thigs {Name: Jess} // Function const updateDeptArr = await Data.findOneAndUpdate( // First Version { '_id':'60cbbb23d5741b51f8fefc2b' // First user ID [`peeps._id`]: '60cbbb28d5741b51f8fefc2e', // Second ID 1st nest [`arraNames._id`]: '60cbc2d1cf7b1c3250e08dc2' // Third ID 2nd nest }, { $set: { [`peeps.$.arraNames.$.Name`]: 'Jess' }, { _id: true, new: true }) // Second Version { '_id': '60cbbb23d5741b51f8fefc2b' 'peeps': { "$elemMatch": { "_id": '60cbbb28d5741b51f8fefc2e', "arraNames._id": "60cbc2d1cf7b1c3250e08dc2" } } }, { $set: { // Test 1 [`peeps.$[outer].arraNames.$[inner].Name`]: 'Jess' //Test 2 'peeps.$[outer].arraNames.$[inner].Name': 'Jess' } }, { _id: true, new: true }) // 50% working version Not dynamic but it modify the targeted element const updateDeptArr = await Data.findOneAndUpdate( { '_id': req.body.userId, // user ID [`peeps._id`]: '60cbbb28d5741b51f8fefc2e', // Second ID }, { $set: { [`peeps.0.arraNames.0.Name`]: 'Jess' } }, { _id: true, new: true } ) // Schema { UserId, '60cbbb23d5741b51f8fefc2b' User: "", peeps [{ _id: '60cbbb28d5741b51f8fefc2e' arraNames: [{ _id:'60cbc2d1cf7b1c3250e08dc2' Name: "",// End point Name must be Jess }], }],

我希望那个名字是Jess来修改终点,有很多名字

嵌套 arrays 是个坏主意。 我建议您尝试更扁平的结构,以使查询更快更简单。 话虽如此,您可以通过以下方式更新交易:

 Data.findOneAndUpdate({ UserId, "60cbbb23d5741b51f8fefc2b" }, { $set: { "peeps.$.arraNames.$[j].Name": "Jess" } }, { arrayFilters: [{ "j._id": { $eq: "60cbc2d1cf7b1c3250e08dc2" } }] })

arrayFiltersupdate()updateOne(), updateMany()findOneAndUpdate()bulkWrite()方法的选项中传递。 任何符合给定条件的元素都将被更新。

另请参阅使用 MongoDB位置过滤更新嵌套数组,了解这些新的位置运算符如何应用于“嵌套”数组结构,其中“数组位于其他数组中”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM