Как автоматически обновлять поле в MongoDB?

Привет. Изучаю 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). Как правильно реализовать помогите?
  • Вопрос задан
  • 742 просмотра
Решения вопроса 1
@iShatokhin
JS developer
Можете воспользоваться $inc при добавлении
https://docs.mongodb.org/v3.0/reference/operator/u...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы