javascript - 在不更改对象 ID 的情况下更新嵌套对象数据

标签 javascript node.js mongodb mongoose mongoose-schema

我目前正在使用数组过滤器来更新嵌套对象。 我的结构是 -

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 的情况下是否还有其他替代方法。

提前致谢

最佳答案

您可以遍历作为有效负载获取的 key ,并将其放入 $set 运算符中。

const data = {
  firstKey: "key",
  secondKey: "key2",
  thirdKey: "key3"
}
const object = {}

for (var key in data) {
  object[`subCategories.$.subSubCategories.$[j].${key}`] = data[key]
}

let query = { 'subCategories.subSubCategories._id': subSubId };
let update = { '$set': object };
let option = { 'arrayFilters': [{ 'j._id': subSubId }], 'new': true };

await Categories.findOneAndUpdate(query, update, option)

关于javascript - 在不更改对象 ID 的情况下更新嵌套对象数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56162293/

相关文章:

java - 使用 MongoDB 和 Spring Data JPA 的复合主键

linux - 如何使用 CoreOS 的云配置文件启动 Docker 容器?

c# - Serilog 不会在 MongoDB 上写入,也不会抛出任何错误

javascript - 我如何处理两级嵌套 promise 的结果?

javascript - Node 服务器响应错误 : process. nextTick(function(){throw err;});

javascript - 使用 ng-if 时 Angular 过滤器没有效果

node.js - 将 PCM-Streams 传输到一个函数中

node.js - NPM 会忽略 .gitignore 中列出的文件吗?

javascript - javascript中的别名函数

javascript - 使用 jQuery 方法存储共享值的页面,以便在重新加载时由主 Controller 方法重用