Как выполнить цикл для транзакции в nodejs - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь выполнить транзакцию в mongoodb, используя модули Fawn npm.Я написал код ниже, и он работает нормально.Но если элемент представляет собой массив, имеющий несколько элементов, как я могу выполнить одно и то же действие?В этом случае мне нужно сохранить заказ только один раз, но обновить запас несколько раз.

Я попытался выполнить цикл, но заказ был сохранен два раза, и я получаю сообщение об ошибке MongoError: E11000 duplicate key error collection: db.orders index Это потому, что я сохраняю один и тот же заказ несколько раз.

try {
    new Fawn.Task()
      .save('orders', order)
      .update(
        'items',
        { _id: item[0]._id },
        { $inc: { stock: -+req.body.quantity[0] } }
      )
      .run();
  } catch (ex) {
    res.status(500).send('Something failed');
  }

где item - список всех идентификаторов элементов, которые мне нужно обновить.

Я хочу обновить заказ один рази другой элемент несколько раз в зависимости от размера массива элементов.

Когда я делаю это, он работает абсолютно нормально.Но я хочу, чтобы он был динамическим, поскольку я не буду знать размер массива.

hard coded code

1 Ответ

1 голос
/ 24 сентября 2019

Вы можете условно связать это следующим образом:

try {
  let task = new Fawn.Task()

  //
  task = task.save('orders', order)

  //
  for (let i in item) {
    task = task.update(
      'items', {
        _id: item[i]._id
      }, {
        $inc: {
          stock: - +req.body.quantity[i]
        }
      }
    )
  }

  task.run();

} catch (ex) {
  res.status(500).send('Something failed');
}

Возможно, вы захотите добавить проверку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...