Mongoose не сохраняет изменения в документе

Прошу прощения, если это может быть повторяющийся вопрос, но мне довольно сложно понять Mongoose.
Я работаю над проектом Node.js, который реализует Mongoose и MongoDB. Я хочу изменить и сохранить данные некоторых пользователей с помощью вызова с определенной конечной точки.
Схема Mongoose выглядит так:

  var UserSchema = new Schema({
  isAdmin: {type: Boolean, default: false},
  name: String,
  surname: String,
  nickname: { type: String },
  email: { type: String, lowercase: true, required: true, trim: true, unique: true, dropDubs: true },
  password: { type: String, required: true },
  salt: { type: String },
  verified: { type: Boolean, default: false },
  bio: {
    type: { type: String, enum: [0,1] }, // 0='Appassionato', 1='Giocatore'
    birthday: String,
    height: Number,
    number: Number,
    role: { type: String, enum: [0,1,2,3] }, // 0='Playmaker', 1='Ala', 2='Guardia', 3='Centro'
    team: String,
    city: String,
    aboutMe: String,
  },
  newsletter: {type: Boolean, default: false},
  lastCheckin: {type: mongoose.Schema.Types.ObjectId, ref: 'Checkin'},
  follows: [{type: mongoose.Schema.Types.ObjectId, ref: 'Structure'}],
  score: { type: Number, default: 0 },
  profilePicture: String,
  lastLogin: {type: Date},
  facebook: {
    id: String,
    accessToken: String,
    profileImage : String
  }
}, {
  collection: 'users',
  retainKeyOrder: true,
  timestamps: true,
}).plugin(mongoosePaginate);

Ниже приведен код, когда конечная точка опрашивается.

exports.updateUser = (req,res)  => {
  var userId = req.params.userId;
  var updates = req.body;

  User.findOneAndUpdate({_id: userId}, {$set: updates}, (err, saved) => {
    if (!err) {
      console.log("Ritorno questo: " + saved);
      return res.status(202).json(saved);
    } else {
      return res.status(500).json(saved);
    }
  });

};

Насколько я понял, метод findOneAndUpdate, предоставляемый Mongoose, должен найти документ, который я ищу, а затем изменить его и сохранить. Но этого не происходит.
Через PostMan отправляю этот JSON

{"bio.aboutMe":"Hello this is just a brief description about me"}

Но PostMan отвечает неизмененным объектом. Что мне здесь не хватает?

Попробуйте это: User.findOneAndUpdate ({_ id: userId}, {$ set: updates}, {new: true} ...

cagliostro 31.10.2018 14:34

Спасибо, проблема решена! Что делает {new: true}?

Gianmarco F. 31.10.2018 14:38

возвращает обновленный документ :) mongoosejs.com/docs/documents.html

cagliostro 31.10.2018 14:40

Да ладно, потому что даже если я попытаюсь позже запросить базу данных, она не покажет новых изменений. В любом случае, спасибо :)

Gianmarco F. 31.10.2018 14:41
0
4
427
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Что вам нужно сделать, так это добавить {new: true}, он вернет вам обновленный документ. В документация:

If we do need the document returned in our application there is another, often better, option:

> Tank.findByIdAndUpdate(id, { $set: { size: 'large' }}, { new: true },
> function (err, tank) {   if (err) return handleError(err);  
> res.send(tank); });

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

Итак, что вам нужно сделать, это:

User.findOneAndUpdate({_id: userId}, {$set: updates}, {new:true}.....

Другие вопросы по теме