В моих документах заказа у меня есть текущее свойство status
:
const StatusSchema = new Schema({
code: {
type: String,
required: true,
enum: ['pending', 'paid', 'failed'],
},
updatedAt: {
type: Date,
required: true,
default: Date.now,
},
})
Я также отслеживаю прошлых статусов в массиве.Итак, в моей фактической Order
схеме у меня есть что-то вроде:
status: {
type: StatusSchema,
},
statusHistory: [
StatusSchema,
],
Теперь, когда я изменяю status.code
ордера, я хочу, чтобы предыдущий статус был перенесен в statusHistory
, не имеячтобы делать это вручную каждый раз.
Насколько я понимаю, метод будет наиболее подходящим способом сделать это.Итак, я написал:
OrderSchema.methods.changeStatus = async function (status) {
const order = await this.model('Order').findById(this.id)
order.statusHistory.push(this.status)
order.status = {
code: status,
}
return order.save()
}
Кажется, это работает.Однако, когда я использую его следующим образом:
const order = await Order.findById(id) // Has status "pending" here
await order.changeStatus('failed')
console.log(order.status) // Still pending, reference not updated
Моя исходная переменная order
здесь не обновляется - в журнале консоли будет напечатан исходный порядок, извлеченный с помощью запроса findById
, несмотря на то, что документбыл успешно обновлен и сохранен.
Как написать метод Mongoose, который будет обновлять переменную на месте, без необходимости переназначения?