Mongoose -> Обновление документа из пользовательского метода Schema - PullRequest
1 голос
/ 16 мая 2019

Я пытаюсь обновить массив из пользовательской функции схемы.

У меня есть модель User, основанная на UserSchema:

userschema.js:

const UserSchema = mongoose.Schema( {
  firstName: String,
  lastName: String,
  schedule: {
    'type': Object,
    'default': {
      'mon': [],
      'tue': [],
      'wed': [],
      'thu': [],
      'fri': [],
      'sat': [],
      'son': []
    }
  }
} ) 

UserSchema.methods.saveTimeslot = async function( timeslot ) {

  const toSave = {
    'id': timeslot.id,
    'start': timeslot.start,
    'end': timeslot.end,
    'daily': timeslot.daily
  }

  this.schedule[ timeslot.day ].push( toSave )
  await this.save()
  return Promise.resolve()
}

const User = mongoose.model( 'User', UserSchema )

module.exports = User

На сервере я просто вызываю функцию:

server.js

// ------------
// Update user
// ------------
const user = await User.findOne( { '_id': decoded.id } )
await user.saveTimeslot( timeslot )
console.log('user saved: ', JSON.stringify( user, null, 2 ) )

Журнал показывает мне новый временной интервал в правильном массиве в расписании, нокогда я снова запускаю функцию или проверяю в БД таймслот, он не сохраняется.

Я хочу сделать это так вместо использования findOneAndUpdate, потому что я сделаю еще несколько операций в зависимости от this.scheduleв функции saveTimeslot позже.

Я попробовал следующее, которое отлично работает:

userschema.js:

const UserSchema = mongoose.Schema( {
  bla: Number
} ) 

UserSchema.methods.saveTimeslot = async function( timeslot ) {
  this.bla = Math.random()
  await this.save()
  return Promise.resolve()
}

const User = mongoose.model( 'User', UserSchema )

module.exports = User

Кто-нибудь знает, как это можно сделать?Я не могу найти решение.

Любая помощь будет принята с благодарностью!

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