Как получить элементы внутри массива вместо самого массива в JavaScript - PullRequest
0 голосов
/ 06 октября 2018

Мои данные поступают от пользователя и сохраняются в виде объекта, этот объект должен перейти в Mongo после некоторого массажа на стороне сервера.Я использую Mongoose и использую синтаксис $push {item} для вставки элемента в мою БД.

Моя модель Mongoose имеет photos: [] в качестве синтаксиса, просто простой массив.Внутри этого массива мне нужны загруженные фотографии.Но если пользователи загружают в разное время, мой массив может закончиться массивом массивов, и мне просто нужен один простой массив с несколькими объектами.

Вот мой маршрут:

const testMedia = async (req, res) => {
  //loop through the res.locals.ids and save each as their own photo in the event
  let events = [];
  let photosArray =
  let owner = {id: req.user._id};
  const promises =  await res.locals.ids.map((photoLink) => {
     events.push({link: photoLink.link,
     dateUploaded: new Date(Date.now()).toLocaleString(),
     eventID: req.body.eventId,
     owner: owner
     })
  });
  await Event.findByIdAndUpdate(
      req.body.eventId,
      { $push: {
        photos: events
      }},
      { save: true, upsert: true, new: true },
      (err) => {
        if (err){
          console.log("Error in testMedia  ||  " + err);
          res.sendStatus(300);
        }
      }
    );

  await Promise.all(promises);
  res.render("eventDisplay", { events: event });
  res.end();
};

Проблема, с которой я сталкиваюсь, заключается в том, что если я помещу элементы в events, я буду выдвигать массив объектов, когда мне нужно простосами объекты, так что я либо должен сделать один вызов базы данных для каждого объекта для вставки, что кажется пустой тратой ресурсов, либо мне нужно найти способ вставить все объекты, не помещая их в массив.

По какой-то причине я не могу понять это.Есть идеи?

1 Ответ

0 голосов
/ 07 октября 2018

Согласно документам Mongo, вы можете использовать $each

.findByIdAndUpdate(req.body.eventId, {
  $push: {
    photos: { $each: events }
  }
})

. Это приведет к добавлению нескольких элементов в ваш массив.

...