【问题标题】:Remove _id attributes before inserting into database (using node & mongoose)在插入数据库之前删除 _id 属性(使用节点和猫鼬)
【发布时间】:2021-01-30 21:38:13
【问题描述】:

我正在使用 mongodb 3.6.20、mongoose 5.10.9 和节点 14.13.1

情况如下。 我想向 db 插入一个复杂的对象。该对象包含一个对象数组,其中每个对象还包含一个对象数组。这些对象由设置 id 的客户端提供(O 无权更改客户端)。我想删除 id 并让 mongo 驱动程序处理它们并生成新的。

给出了什么:

let obj = {
  property1: {
    property2: "str",
    property3: 3
  },
  property4 : [{
    _id: "a valid mongo id",
    property5: "str",
    property6: [{
      _id: "another valid mongo id",
      property7: "str"
    }]
  }]
}

我想提供什么来插入查询:

let obj = {
  property1: {
    property2: "str",
    property3: 3
  },
  property4 : [{
    property5: "str",
    property6: [{
      property7: "str"
    }]
  }]
}

我尝试递归删除它们,但调用堆栈已超出。 有什么聪明的方法可以实现吗?我在 mongoose 文档中找到的选项 {_id: false}{id:false} 实际上仅适用于查询的返回文档

【问题讨论】:

  • 感谢您的评论。我碰到了那个帖子,但正如我所提到的,属性的递归删除会导致 Maximum call stack size exceeded. 错误
  • 您的递归删除中有一个错误。发布代码,人们会提供帮助。

标签: node.js mongodb mongoose


【解决方案1】:

这个怎么样?

function removeIDs (obj) {
  Object.keys(obj).forEach(function (key) {
      if (Array.isArray(obj[key])) {
          delete obj[key][0]._id;
          return removeIDs(obj[key][0]);
      }
  });
}
removeIDs(obj)

【讨论】:

    猜你喜欢
    • 2015-05-14
    • 2019-10-26
    • 2017-08-14
    • 2015-06-07
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 2017-10-23
    • 2018-11-19
    相关资源
    最近更新 更多