javascript - 在不更改对象 ID 的情况下更新嵌套对象数据
问题描述
我目前正在使用数组过滤器来更新嵌套对象。我的结构是 -
Category Collection -
{
name:Disease,
_id:ObjectId,
subCategory:[{
name:Hair Problems,
_id:ObjectId,
subSubCategory:[{
name: Hair Fall,
_id:ObjectId
},{
name: Dandruff,
_id:ObjectId
}]
}]
}
我想通过使用数组过滤器来更新 id 为 1.1.1 的子类别。
let query = { 'subCategories.subSubCategories._id': subSubId };
let update = { $set: { 'subCategories.$.subSubCategories.$[j]': data } };
let option = { arrayFilters: [{ 'j._id': subSubId }], new: true };
await Categories.findOneAndUpdate(query, update, option
此代码工作正常,但数组过滤器更改了 subsubCategory 的对象 ID。在不更改 ObjectId.
提前致谢
解决方案
问题在于$set
您没有提到要更新的特定字段,而是subCategory.$.subSubCategory.$[j]
替换与 _id 过滤器匹配的完整对象元素。因此,您的 _id 字段也正在更新。您必须在数组元素标识符之后明确提及字段名称。请参见下面的示例:
假设您要更新from中的name
字段to 。然后这样做:subSubCategories
Dandruff
new Dandruff
let update = { $set: { 'subCategories.$.subSubCategories.$[j].name': "new Dandruff" } };
这只会更新数组name
中的字段subSubCategories
推荐阅读
- angular - Angular Universal - AWS Lambda 或 EC2
- c++ - 为什么mac os sdl2程序窗口没有响应?
- oracle - 如何在程序中显示光标?
- javascript - 使用 $emit 从子组件向父组件发送数据不适用于 Vue
- reactjs - React hook useLayoutEffect 不更新初始渲染时的 ref 参数
- apache-spark - 如何修复 oozie spark yarn 提交中的“java.lang.NoSuchMethodError”?
- windows - PE 加载:如何处理资源部分?
- vba - VBA 列出 MS Access 中所有打开的对象
- angularjs - AngularJS - 将按钮的位置移动到列标题下
- javascript - 通过单击段落随机背景颜色。我的代码给出了错误