Условно обновить значение вложенного объекта в mongoDB - PullRequest
1 голос
/ 17 апреля 2020

У меня есть следующий вложенный объект для обновления после некоторых условий. На основе условия, наконец, я хочу обновить promotional или transactional значение

{
    "_id" : "XX1",   
    "credit" : {
        "sms" : {
            "credit" : {
                "promotional" : 0,
                "transactional" : 1231
            }
        },
        "viber" : {
            "credit" : {
                "promotional" : 10,
                "transactional" : 50
            }
        },
        "whatsapp" : {
            "credit" : {
                "promotional" : 30,
                "transactional" : 40
            },            
        }
    },
}

условия будут основаны на значениях передаваемой переменной

 accountId = "XX1",
 channel = "sms",
 messageType = "promotional",
 credit = 150

эти условия должны проверяться перед обновлением

  • _id должно совпадать с accountId
  • , если channel='sms', следует выбрать credit.sms
  • если messageType = "promotional", то проверьте, что рекламная стоимость больше, чем credit, или нет
  • , если она больше credit (credit.sms.credt.promotional) должна обновляться с : (credit.sms.credt.promotional)-credit

1 Ответ

2 голосов
/ 18 апреля 2020

Вы можете использовать Вычисленное имя свойства и $ в операторе c, чтобы сделать это. Что-то вроде:

YourModel.findOneAndUpdate(
  { _id: accountId, [`credit.${channel}.credit.${messageType}`]: { $gte: credit } },
  { $inc: { [`credit.${channel}.credit.${messageType}`]: -credit} }
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...