Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何使用mongoose从mongodb中userschema中的数组中删除对象?_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js 如何使用mongoose从mongodb中userschema中的数组中删除对象?

Node.js 如何使用mongoose从mongodb中userschema中的数组中删除对象?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,用户模式 Completed tasks是我试图从中删除的数组 var mongoose = require("mongoose"); var passportLocalMongoose = require("passport-local-mongoose"); var userSchema = new mongoose.Schema({ username: String, password: String, completedtasks :

用户模式 Completed tasks是我试图从中删除的数组

var mongoose = require("mongoose");
var passportLocalMongoose = require("passport-local-mongoose");

var userSchema = new mongoose.Schema({
  username: String,
  password: String,
  completedtasks : [{task : String , time : String}] ,
});
userSchema.plugin(passportLocalMongoose);
module.exports = mongoose.model("User", userSchema);


试图从阵列中删除已完成任务的路由器代码

:id是存储在completedtasks数组中的任务的id :uid是用户的id

我的目标是从已完成的任务数组中删除任务

但猫鼬文件并没有起到多大作用

我尝试了founduser.remove而不是update,它意外地删除了我的测试用户帐户,该帐户包含大量数据,因此我不再进行实验

router.put('/:id/deletectask/:user' , (req , res) =>{
  var tid = req.params.id ;
  var uid = req.params.user;
  User.findById(uid , function(err , founduser){

    if(err){console.log(err)}

    else{

    founduser.update( {} , 
      { $pull: {completedtasks : {_id : tid} }}
    ) ;
      res.redirect('/'+uid+'/ctl')
  }
  } )

})


您可以这样做,在一个查询中:

User.update({
    _id: uid
  }, {
    "$pull": {
      "completedtasks": {
        "_id": tid
      }
    }
  },
  (err, result) => {
    //do something here
  })

非常感谢Karl,遗憾的是,我不得不以艰苦的方式学习这一点,并花费了大量的时间,我完成了Colt Steele的webdev训练营,目前正在进行我的第一个项目


谢谢你的帮助。不客气。如果你投票并接受答案会很有帮助,这样也会帮助其他有类似问题的用户,谢谢,这是你的第二个帐户吗?看起来我不小心用另一封电子邮件登录了。