Как удалить из двух коллекций MongoDB с помощью Node - PullRequest
0 голосов
/ 21 марта 2019

У меня есть сайт с пользователями и постами.Есть две коллекции MongoDB, одна для пользователей и одна для постов.Я могу удалить через веб-сайт из каждой коллекции, но я хочу, чтобы при удалении пользователя он также удалял все сообщения пользователя.

Это код для удаления сообщений и пользователей:

function deleteUser() {
  var confirmation = confirm("Are you sure?");
  if (confirmation) {
    $.ajax({
      type: 'DELETE',
      url: '/users/delete/' + $(this).data('id'),
      //url: '/posts/deletew/'+$(this).data('uploadedBy')
    }).done(function(response) {
      window.location.replace('/usersdata');
    });
    window.location.replace('/usersdata');
  } else {
    return false;
  }
}

$(document).ready(function() {
  $('.deletePost').on('click', function(e) {
    $target = $(e.target);
    const id = $target.attr('data-id');
    var confirmation = confirm('Are you sure?');
    if (confirmation) {
      $.ajax({
        type: 'DELETE',
        url: '/posts/delete/' + id,
        success: function(response) {
          console.log('here');
        },
        error: function(err) {
          console.log(err);
        }
      });
      window.location.replace('/posts/blog');
    }
  });
});

Я обрабатываю запрос с NodeJS на стороне сервера:

//delete users
app.delete('/users/delete/:id', function(req, res) {
  User.deleteOne({
    _id: ObjectId(req.params.id)
  }, function(err, result) {
    if (err) {
      console.log(err);
    }
    res.redirect('/');
  });
})

//delete post
app.delete('/posts/delete/:id', function(req, res) {
  Post.deleteOne({
    _id: ObjectId(req.params.id)
  }, function(err, result) {
    if (err) {
      console.log(err);
    }
    res.redirect('/blog');
  });
})

//delete post with deleted user that what i've been trying to do
app.delete('posts/deletew/:uploadedBy', function(req, res) {
  Post.deleteOne({
    uploadedBy: req.params.uploadedBy
  }, function(err, result) {
    if (err) {
      console.log(err);
    }
    res.redirect('/');
  })
})

Если вы знаете, какчтобы сделать это, пожалуйста, ответьте.Спасибо

1 Ответ

0 голосов
/ 21 марта 2019

Я бы предложил операцию удаления связанных «записей» также внутри самого «app.delete» («/ posts / delete /: id»). ТАК, что при удалении пользователя все связанные данные из «записей» также будутудаляется без затрат другой конечной точки API. Вы можете использовать MongoDB 'deleteMany' для этого, например,

db.posts.deleteMany( { user_id : req.params.id } )

Добавление к нему. Я бы никогда не предложил жестко удалить сообщение из коллекции пользователя только потому, чтоПользователь удален. Вместо этого добавьте еще один ключ в коллекцию постов (скажем, «удаленный») и установите значение false по умолчанию и сделайте его истинным для операции удаления пользователя. В следующий раз, когда вы выполните операцию поиска, добавьте дополнительный фильтр как {delete: false}, чтобы вы не удаляли сообщения пользователя в списке. cheers!

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