从参数中的对象中删除属性与从对象中删除属性

时间:2021-02-18 18:39:18

标签: javascript node.js mongoose

只是想弄清楚一些问题。

context: randomFunction 是一个接受 2 个参数(id & metaData)的函数。它是在控制器内部调用的。代码如下:

await randomFunction(id, doc);

doc 包含一个对象(基本上是 mongodb 中的一个文档)。 假设文档包含以下内容:

{
    _id: "123456789012345678901234",
    age: 30,
    name: 'Lorem Ipsum',
    gender: 'male'
}

现在,在初始化 randomFunction 的操作文件中。

const randomFunction = async (id, metaData) => {
   console.log(metaData) // prints metaData
   delete metaData._id
   console.log(metaData) // still prints metaData without deleting _id property
   //code below
}

上下文: 我想删除 MetaData 的 _id 属性以将其传递给猫鼬中的 findOneAndUpdate() 函数。但是我无法成功删除 _id 属性。所以我创建了数据对象并传递了它。

const randomFunction = async (id, metaData) => {
   const data = {
     name: metaData.name,
     age: metaData.age,
     gender: metaData.gender
   }
   //code below
}

成功了。

然后我测试并控制台记录了一些事情。

const randomFunction = async (id, metaData) => {
    console.log(metaData) // prints metaData
    delete metaData._id
    console.log(metaData) // still prints metaData without deleting _id property
    const data = {
     _id: metaData._id,
     name: metaData.name,
     age: metaData.age,
     gender: metaData.gender
   }
    console.log(data) // prints data object
    delete data._id
    console.log(data) // prints data with deleting _id property
   //code below
}

那么,我无法删除 MetaData 中的 _id 但能够删除 Data 中的 _id 的原因是什么。

当我尝试在 javascript 控制台(chrome)中重现相同的内容时,我无法重现。 (它也从参数中删除属性。)。

1 个答案:

答案 0 :(得分:0)

也许有人会觉得它很有用。

答案是猫鼬文档是不可变的。

我们需要将 mongoose 对象转换为 javascript 对象。

原因如下:

链接到适当的问题和答案:

https://stackoverflow.com/a/13350500/14619863