Обновление глубоко вложенного массива объектов внутри запроса mongoose

#javascript #node.js #mongodb #mongoose

#javascript #node.js #mongodb #mongoose

Вопрос:

Я пытаюсь обновить документ mongoose, но это глубоко вложенный массив объектов, и у меня возникают проблемы с обновлением его с помощью оператора распространения. У меня есть массив ссылок на изображения, и я хочу выполнить итерацию по массиву отношений в базе данных и добавить изображение к каждому отношению. Код показывает мой подход, но синтаксис неправильный. Я добавил изображение базы данных, которое показывает, куда я хочу добавить переменную image.

  // Get Images
        const imagesData = await axios.get(
          "https://randomuser.me/api/?results=4amp;gender=male"
        );
        const images = [];
        imagesData.data.results.forEach((result) => {
          images.push(result.picture.large);
        });

        // Update Company
        for (let i = 0; i <= 3; i  ) {
          const updateCompany = await Companies.findByIdAndUpdate(
            req.params.id,
            { relationships: [
              ...relationships, 
              relationships[i]: {
                ...relationships[i], 
                image: images[i]}
              ] },
            { new: true }
          ).exec();
        }
  

Также я использую запрос mongoose внутри цикла for. Это правильный способ сделать это.
mognoDB

Ответ №1:

Вы должны извлечь нужный документ. Затем обработайте полученный объект как объект javascript и добавьте или обновите все, что хотите, затем используйте .save() функцию, предоставляемую mongoose.

 let result = await Companies.findById(id);
result = result.map((company)=>{
  update your object here
})

result.save()
  

.save() Функция позаботится об обновлении объекта в базе данных