NodeJS & Mongoose, обновление значений в массиве объектов не работает - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь обновить некоторые конкретные массивы в моем UserSchema с помощью функции mongoose findByIdAndUpdate().

Это мой UserSchema:

const UserSchema = new mongoose.Schema({
    mail: {type: String, required: true, unique: true},
    password: {type: String, required: true},
    friends: [{id: String}],
    prot: [{
        id: String,
        admin: Boolean,
    }]
});

Я хочу обновить только элемент prot, вот как я хочу сделать это:

User.findByIdAndUpdate(req.body.userId, {
        $set: { prot: [{ id: req.body.lockId, admin: req.body.isAdmin }] }, function(err, user) {
            if (err) {
                return res.status(500).send({
                    message: err.message || "Some error occured while updating user"
                });
            }
            if (!user) {
                return res.status(404).send({
                    message: "User not found"
                });
            }

            return res.status(200).send(user);
        }
    })

Но когда я пытаюсь отправить запрос через Postman, я не получаю ответ или ошибку ..

1 Ответ

0 голосов
/ 04 сентября 2018

FindByIdAndUpdate не возвращает обновленный документ по умолчанию, вам следует добавить параметр {new: true} . Вы тоже перепутали скобки. Сделайте это, как показано ниже:

User.findByIdAndUpdate(
    req.body.userId, 
    {
       $set: { 
          prot: [{ 
                id: req.body.lockId, 
                admin: req.body.isAdmin 
          }] 
       }
   }, 
   { new: true },
   function(err, user) {
        if (err) {
            return res.status(500).send({
                message: err.message || "Some error occured while updating user"
            });
        }
        if (!user) {
            return res.status(404).send({
                message: "User not found"
            });
        }

        return res.status(200).send(user);
    }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...