Удаление данных модели через loda sh и save () не сохраняющейся модели в mongodb - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь удалить один объект из коллекции User следующим образом:

router.post('/accept-trades', function (req, res, next) {
  const {senderName, receiverName, senderId} = req.body;
  const user = req.user;
  console.log(senderName, receiverName);
  if (senderName) {
    User.findOne({ name: senderName })
    .then(sender => {
      _.remove(user.receivedTradeRequest, {username: senderName});
      _.remove(sender.sentTradeRequest, {username: receiverName});

      console.log('user.receivedTradeRequest', user.receivedTradeRequest);
      console.log('\n\nuser.sentTradeRequest', user.sentTradeRequest);

      async.parallel([
        function (cb) {
          user.save()
          .then(isSave => {
            cb(null, true);
          })
          .catch(err => {
            cb(err, null);
          });
        },
        function (cb) {
          sender.save()
          .then(isSave => {
            cb(null, true);
          })
          .catch(err => {
            cb(err, null);
          });
        }
      ], (err, results) => {
          if (err) {
            return res.status(500).json({
              message: 'Error: Trade is invalid as Card is already traded!',
            });
          }
          res.send('done');
          //res.redirect('/trade');
      });
    })
    .catch(err => {
      throw err;
    });
  } else {
    return res.status(500).json({
      message: 'Only accessible to logged in users!',
    });
  }
});

Здесь пользователь получает доступ через req.user (я использую паспорт).

Когда я зарегистрируйте пользователя после удаления, user.receivedTradeRequest и sender.sentTradeRequest, печатая пустой массив, который является правильным поведением.

Но когда я вижу mongodb, массив все еще присутствует для имени пользователя.

Не могли бы вы подсказать, что не так с кодом?

PS: Я знаю о mongodb $ pull для удаления. Я делаю некоторые другие вычисления для пользовательских данных, так что было связано с вышеуказанным подходом.

1 Ответ

0 голосов
/ 12 апреля 2020

Мне удалось решить эту проблему путем переназначения массива после удаления элемента. Использование _.filter вместо _.remove решает проблему.

Одна вещь, которую я не понимаю, это loda sh _.remove, обновляющая исходный массив после удаления, но здесь это явно не так.

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