Smazat vlastnost z objektu v argumentu vs Smazat vlastnost z objektu

Jen se snažím přijít na nějaké otázky.

kontext:randomFunction je funkce, která přebírá 2 argumenty (id &metaData). Je to volání uvnitř ovladače. Kód je uveden níže:

await randomFunction(id, doc);

doc obsahuje objekt (v podstatě dokument v mongodb). Předpokládejme, že doc obsahuje následující:

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

Nyní v operačním souboru, kde je inicializována 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
}

context:Chtěl jsem odstranit vlastnost _id MetaData a předat ji funkci findOneAndUpdate() v mongooose. Nepodařilo se mi však smazat vlastnost _id. Vytvořil jsem tedy datový objekt a předal jej.

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

Fungovalo to.

Poté jsem otestoval a konzole zaprotokoloval několik věcí.

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
}

Jaký je tedy důvod, proč jsem nemohl odstranit _id v MetaDatech, ale mohl jsem mít možnost _id v Data.

Když jsem se snažil reprodukovat totéž v konzoli javascript (chrome), nebyl jsem schopen reprodukovat. (také maže vlastnosti z argumentů.).

Odpověď

Možná se to někomu bude hodit.

Odpověď je, že mongoose dokumenty jsou neměnné.

Potřebujeme převést objekt mongoose na objekt javascript.

Důvod je následující:

Odkaz na příslušnou otázku a odpověď:

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