只是想弄清楚一些问题。
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)中重现相同的内容时,我无法重现。 (它也从参数中删除属性。)。
答案 0 :(得分:0)
也许有人会觉得它很有用。
答案是猫鼬文档是不可变的。
我们需要将 mongoose 对象转换为 javascript 对象。
原因如下:
链接到适当的问题和答案: