【问题标题】:How to delete from two MongoDB collections using Node如何使用 Node 从两个 MongoDB 集合中删除
【发布时间】:2019-04-11 01:32:15
【问题描述】:

我有一个包含用户和帖子的网站。有两个 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('/');
  })
})

如果你知道怎么做,请回答。谢谢

【问题讨论】:

    标签: jquery node.js ajax express


    【解决方案1】:

    我建议在“app.delete('/posts/delete/:id'”本身内删除相关“帖子”的操作。这样当您删除用户时,“帖子”中的所有相关数据也将是无需花费另一个 API 端点即可删除。您可以为此使用 MongoDB 'deleteMany'。 例如,

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

    添加到它。我绝不会因为用户被删除而建议从用户的收藏中硬删除帖子。相反,在帖子集合中添加另一个键(例如,'deleted')并默认将其设为 false,并在用户删除操作时将其设为 true。下次您执行查找操作时,请提供一个额外的过滤器 {deleted: false},这样您就不会在列表中删除用户帖子。 干杯!

    【讨论】:

    • 感谢您的回答,但我不明白我可以将带有 {deleted : true} 的帖子用于什么用途?
    • 对于您的场景,deleteMany 将像我描述的那样工作,就像一个魅力。但我建议永远不要在 DB 中进行硬删除,而是通过制作另一个键并切换它来进行软删除。希望有意义
    猜你喜欢
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 2021-09-11
    • 2018-11-21
    • 2017-02-21
    • 2018-09-01
    相关资源
    最近更新 更多