Я пытаюсь обновить массив из пользовательской функции схемы.
У меня есть модель 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
Кто-нибудь знает, как это можно сделать?Я не могу найти решение.
Любая помощь будет принята с благодарностью!