Замена предыдущего массива объектов новым массивом объектов с помощью express / mongoose - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь обновить массив избранных станций в своей базе данных, однако я просто не могу его обновить? Я искал целую вечность, чтобы попытаться найти решение, но, похоже, ничего не помогло.

У меня есть идентификатор, сохраненный в Cook ie, и я отправляю его в теле, когда сделан запрос на обновление. ..

"selected" - это массив объектов. это то, что нужно будет заменить содержимое свойства favouriteStations или добавить его, если оно пустое.

структура базы данных выглядит следующим образом:

"id": id,
"email: "test@test",
"password": "test",
"userInfo": {
    "firstName": "test",
    "lastName": "test",
    "favouriteStations": [{array i want to replace}]
}

Я пробовал много разных комбинации, однако это то, что у меня есть, и это не работает

app.post("/api/update", (req, res) => {
  console.log("updating user details");
  const { id, selected } = req.body;

  UserModel.findOneAndUpdate(
    { _id: id },
    { userInfo: { favouriteStations: { $set: selected } } },
    { useFindAndModify: false }
  )
    .then((user, err) => {
      if (err) {
        console.log("an error?");
        res.status(500).json({
          error: "Server error",
        });
      } else if (!user) {
        console.log("user not exists?");
        res.status(401).json({
          error: "Incorrect credentials",
        });
      } else {
        console.log("updated?");
        console.log(user);
      }
    })
    .catch((err) => {
      console.log(err);
    });
});

1 Ответ

1 голос
/ 27 апреля 2020

Неясно, что вы подразумеваете под "... это не работает", не могли бы вы уточнить, например, какие ошибки вы получаете? Если нет, что происходит?

Оператор $set следует использовать в следующей форме, из MongoDB docs :

{ $set: { <field1>: <value1>, ... } }

Говоря, что, возможно, вы не обращаетесь к favouriteStations правильно, используйте точечную нотацию для доступа к поддокументу следующим образом:

...
    UserModel.findOneAndUpdate(
        { _id: id },
        { $set: {'userInfo.favouriteStations': selected} } ,
        { useFindAndModify: false }
      )
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...