Привет. Изучаю NodeJS и c ним же MongoDB. Захотел написать небольшой менеджер финансов. В нем есть пару схем на mongoose.
Подскажите, как сделать, чтобы при добавлении новых транзакций, у каждого счета, автоматически пересчитывались поля spent, earned, summary?
Схема счета.
let accountSchema = new mongoose.Schema({
name: String,
user: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
},
transactions: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Transaction'
}],
spent: Number, // Потрачено
earned: Number, // Заработано
summary: Number// Итого
});
Схема транзакции:
let transactionSchema = new mongoose.Schema({
amount: Number, // Количество
type: {
type: String,
enum: {
values: ['spent', 'earned', 'transfer']
}
},
description: String,
account: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Account'
},
user: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
}
});
Так как при добавлении каждой транзакции делается update аккаунта с добавлением туда новой ссылки в массив транзакций
yield mongoose.models.Account.findByIdAndUpdate(transaction.account, {
$pull: {transactions: transaction._id}
});
пытался повесить на все запросы accountSchema.post middleware
accountSchema.post('update', fn);
Но в this попадает не документ, как в случае с save и remove, а запрос (Query). Как правильно реализовать помогите?