Почему delete не удаляет свойство?

153
25 августа 2021, 03:10
let product_params;
product_params = await BlackProduct.findOne({id: 1})
.then(res => (res))
if (!product_params){
   return null
   // Если документ не найден, то заканчиваю выполнение функции
}
else{
   delete product_params._id;
}
console.log(product_params)

Но когда вывожу в консоль

console.log(product_params)

то все равно свойство _id присутствует.

// delete product_params._id === true
Answer 1

В Mongoose свойство "id" создается по умолчанию и является виртуальным, возвращающим значение "_id". Если вы хотите отключить автоматическое создание свойства "id", вы можете сделать это при определении схемы:

var schema = new Schema({ name: String }, { id: false });

Так же вы можете трансформировать product_params в объект и удалить ключ _id:

const data = product_params.toObject();
delete data[_id];

Иллюстрирующий пример (по итогам обсуждения в комментах):

class A { 
    get _id() { 
        return Math.random(); 
    } 
} 
const obj = new A(); 
console.log(obj._id); 
delete obj._id; 
console.log(obj._id); 
delete obj._id; 
console.log(obj._id);

READ ALSO
Помогите с пониманием работы указателя и массива

Помогите с пониманием работы указателя и массива

Читал, что массив в качестве аргумента в параметр другой функции работает так: типо массив громоздкий, и поэтому в параметр другой функции...

78
Почему всегда выводится 0?

Почему всегда выводится 0?

Почему всегда выводится 0?

134
Забить столбцы и строки значениями

Забить столбцы и строки значениями

Знаю, вопрос для подавляющего большинства травиальныйНо я уже не вижу ошибки

112
volatile register int

volatile register int

Имеет ли смысл такая запись?

126