Разница между obj.key = значение и obj.set (ключ, значение)? - PullRequest
0 голосов
/ 21 апреля 2019

Поэтому, пытаясь обновить документ в mongoose, я понял, что когда я делаю obj.key=value для документа, полученного с помощью Model.findOne(), он не присваивает свойству значение. Но после попытки obj.set (ключ, значение), свойство присваивается его значению в документе. Так почему это так? Обычно, когда я делаю первый метод для объекта, объект получает свойство. Что такое функция .set()? Это как-то связано с мангустом?

//this works
async function updateItem(){
        let updatedItem = await Item.findOne({name:req.body.itemName});
        Object.entries(req.body).forEach(elem=>{
            if(elem[0]!=="itemName"){
                updatedItem.set(elem[0], elem[1]);
            };
        });
    };
    updateItem();
});


//this doesn't work
async function updateItem(){
        let updatedItem = await Item.findOne({name:req.body.itemName});
        Object.entries(req.body).forEach(elem=>{
            if(elem[0]!=="itemName"){
                updatedItem.elem[0] = elem[1];
            };
        });
    };
    updateItem();
});

1 Ответ

1 голос
/ 21 апреля 2019

Это означает, что updatedItem - это не объект, это Map, и для добавления элементов в Map необходимо использовать метод get .

Еще одна вещь, на которую следует обратить внимание: когда вы устанавливаете updatedItem.elem[0], вы буквально пытаетесь добавить ключ "elem[0]" к updatedItem. Чтобы это исправить, вам нужно использовать динамическое обозначение свойств в квадратных скобках:

updatedItem[elem[0]] = elem[1];

Создает новый ключ со значением , равным elem[0], вместо клавиши , равной elem[0].

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...