如何删除mongodb数据库中的特定ID?

时间:2018-10-17 12:42:06

标签: node.js mongodb mongoose

我在这里使用nodejs,express,mongodb和mongoose! 碰巧我试图删除“关注者”文档中的某些ID ...

这是模型的一部分(我只是复制这部分,因为它是我感兴趣的部分):

  var UserSchema = new mongoose.Schema({
     followers: [
        {
            type: mongoose.Schema.Types.ObjectId,
            ref: 'User'
        }
})

我正在尝试使用以下代码删除:

try{
    let user = await User.findById(req.params.id);
    user.followers.remove({_id: ObjectId(req.user._id)});
    user.save();
  }
  catch(err) {
    res.redirect('back');
  }

req.user._id是我要从“关注者”中删除的用户的ID, 但是,无论何时执行此操作,页面都只会继续加载,并且什么也不会发生。=我要删除的关注者并未被删除。有人可以帮我吗?

3 个答案:

答案 0 :(得分:0)

You can deletedocuments within an Array by using $pull In single Query

Query :

db.getCollection('users')
  .update({ "_id": ObjectId("5bb4747f316fcf310f3ef0a4") },
    { $pull: { followers: { _id: ObjectId('5bb4747f316fcf310f3ef0a5') } } },
    { multi: true })

Tested on Mongo GUI.

Test on below doc

{
    "_id" : ObjectId("5bb4747f316fcf310f3ef0a4"),
    "index" : "123456",
    "followers" : [ 
        {
            "_id" : ObjectId("5bb4747f316fcf310f3ef0a6"),
            "name" : "green"
        },
       {
            "_id" : ObjectId("5bb4747f316fcf310f3ef0a5"),
            "name" : "green"
        }
    ]
  }

答案 1 :(得分:0)

好的,所以我发现了问题: 在添加此“ {_id:ObjectId(req.user._id)}”之后,看起来实际上已删除了关注者...该页面没有停止加载,因为我忘记在user.save之后放一个res.redirect。 )! = D 这是我修复后的代码:

try{
    let user = await User.findById(req.params.id);
    user.followers.remove({_id: ObjectId(req.user._id)});
    user.save();
    req.flash('success','Successfully unfollowed '+user.username +"!");
    res.redirect('/users/'+ req.params.id);
  }
  catch(err) {
    req.flash('error', err.message);
    res.redirect('back');

  }

答案 2 :(得分:0)

您可以使用:

A.findByIdAndRemove(id, options, callback) // executes
A.findByIdAndRemove(id, options)  // return Query
A.findByIdAndRemove(id, callback) // executes
A.findByIdAndRemove(id) // returns Query
A.findByIdAndRemove()

例如01:

Example.findByIdAndRemove(example._id, function(err, foundExample) {
    console.log("you removed" + foundExample);
})

例如02:

Example.findByIdAndRemove({_id: numberOfId}, function(err) {
    if(!err){
       console.log("successfully removed")
    })
  })

例如03:

Example.findByIdAndRemove({_id: numberOfId}, async function(err) {
    if(!err){
       await console.log("successfully removed");
    })
  })