Как удалить объект из массива, размещенного в пользовательской схеме в mongodb, используя mon goose? - PullRequest
2 голосов
/ 05 августа 2020

UserSchema 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 is идентификатор задачи, хранящейся в массиве завершенных задач: uid - идентификатор пользователя

Моя цель - удалить задачу из массива завершенных задач.

Но документы Mon goose не помогли так много.

Я попробовал 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')
  }
  } )

})

Ответы [ 2 ]

0 голосов
/ 05 августа 2020

Большое спасибо, Карл, к сожалению, мне пришлось выучить это на собственном горьком опыте и потратить много времени, я прошел курс веб-разработки от Кольта Стила и в настоящее время работаю над своим первым проектом.

Спасибо за вашу помощь. <3. </p>

0 голосов
/ 05 августа 2020

Можно сделать так, одним запросом:

User.update({
    _id: uid
  }, {
    "$pull": {
      "completedtasks": {
        "_id": tid
      }
    }
  },
  (err, result) => {
    //do something here
  })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...