Не удалось обновить массив в MongoDB с помощью mongoose - PullRequest
0 голосов
/ 16 января 2019

Не удалось обновить массив в документе mongodb (даже если я все время получаю статус 200).Вот документ из mongoDB

{ "_id" : ObjectId("5c3f3a59bdbd208298139e23"), "time" : [ 6 ], "id" : 4, "date" : 1547388300000, "text" : "New nEw neW event", "createdAt" : ISODate("2019-01-16T14:06:17.688Z"), "updatedAt" : ISODate("2019-01-16T14:06:17.688Z"), "__v" : 0 }

Мне нужно добавить несколько чисел в массив "time".После просмотра stackoverflow в течение некоторого времени я не нашел никакого решения, где я мог бы написать запрос, который mongoose может проверить данные для меня, поэтому я придумал этот временный код

updateEventHeight(id) {
    let updates = `{\"time\": [6, 7, 8]}`;
    let newId = `{\"_id\" : ${id}}`;
    this.props.updateEvent(newId, updates);
  }

В моем родительском компоненте ReactЯ делаю axios call

axios.post("/api/updateEvent", {
      id: id,
      update: updates
    })

И на стороне сервера у меня есть Express.js, который обрабатывает запрос на обновление, ответ на MongoDB

router.post("/updateEvent", (req, res) => {
  const { id, update } = req.body;
  Data.findOneAndUpdate(id, update, err => {
    console.log(id);
    console.log(update);
    if(err) return res.json({ success: false, error: err });
    return res.json({ success: true });
  });
});

Журнал консоли сервера приходит с ответом 200.Но данные не сохраняются в БД.

GET /api/getEvents 304 4.579 ms - -
[0] GET /api/getEvents 304 4.590 ms - -
[0] {"_id" : 5c3f3a59bdbd208298139e23}
[0] {"time": [6, 7, 8]}
[0] POST /api/updateEvent 200 8.166 ms - 162
[0] GET /api/getEvents 304 3.318 ms - -
[0] GET /api/getEvents 304 3.316 ms - -

1 Ответ

0 голосов
/ 16 января 2019

Вот пример моего кода, который работает для поиска проекта и добавления дополнительных примечаний в массив.

   Data.findOneAndUpdate(
      { _id: req.body._id },
      {
        $push: {
          time: req.body.value
        },
        new: true
      }
    )
      .then(doc => {
        res.send(doc);
      })
      .catch(err => {
        console.error(err);
      });
  });

Возможно, вы также захотите заглянуть в $pushAll, если вы обрабатываете несколько значений, входящих в массив, а также $each, они имеют различное использование, но могут вам помочь. Способ, который я показал здесь, заключается в том, чтобы просто вставить новое значение в массив, который уже существует в базе данных.

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