【问题标题】:How to delete specific id in a mongodb database?如何删除 mongodb 数据库中的特定 id?
【发布时间】:2018-10-17 22:42:30
【问题描述】:

我在这里使用 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, 但是,每当我执行此操作时,页面只会继续加载并且没有任何反应。=我要删除的关注者没有被删除。有人可以帮我吗?

【问题讨论】:

  • 你能把console.log(user)放在await之后吗?我不认为等待完成执行。不知何故你的程序卡在那里
  • Sagar,谢谢,我使用console.log发现了问题!

标签: node.js mongodb mongoose


【解决方案1】:

您可以在数组中使用$pull deletedocuments 在单个Query

查询:

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

Mongo GUI 上测试。

doc下方测试

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

【讨论】:

  • 谢谢!我刚才试过了,它也有效! “multi:true”的意义何在?
  • 如果匹配则删除多个
  • 如果您只需要删除一个值,您可以删除
【解决方案2】:

好的,我发现了问题: 添加此“{_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');

  }

【讨论】:

    【解决方案3】:

    你可以使用:

    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");
        })
      })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-14
      • 1970-01-01
      • 1970-01-01
      • 2014-08-15
      • 1970-01-01
      • 2020-03-19
      • 2020-08-25
      相关资源
      最近更新 更多