首页 > 解决方案 > mongoose nodejs如何从数据库和用户项目数组中删除项目

问题描述

我的应用程序有一个包含一组项目的用户,当我单击打开一个项目时,我有一个“删除”按钮,因此我可以删除该项目(按其 ID)。那行得通,但我的问题是: 我可以从数据库中删除项目,但不能从保留项目 ID 的用户数组项目中删除该项目。

这是我的用户架构:

let mongoose = require("mongoose");


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


let UserSchema = new mongoose.Schema({

   username: String,
   password: String,
   companyname: String,
   companyimageURL: String,
   projects: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Project'
  }] 
});


UserSchema.plugin(passportLocalMongoose);

module.exports = mongoose.model("User", UserSchema);

我的项目架构:

let mongoose = require("mongoose");

let projectSchema = new mongoose.Schema({

   projectname: String,
   typeofproject: String,
   imageURL: String,
   dateMonthFrom: String,
   dateYearFrom: String,
   dateMonthTo: String,
   dateYearTo: String,
   tasks: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Tasks'    
   }],
   user: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: 'User'
   }] 
})

module.exports = mongoose.model('Project', projectSchema);

和我的服务器端:我想我错了!这是我试图通过 Id 找到该项目并删除然后通过 id 和更新找到用户来尝试做的,但这不起作用。

//Delete Project
app.delete('/dashboard/project/:id/edit', (req, res) => {
let id = req.params.id;
let userid = req.user._id;


let project = {
    projectname: req.body.projectname,
    typeofproject: req.body.typeofproject,
    imageURL: req.body.imageURL,
    dateMonthFrom: req.body.dateMonthFrom,
    dateYearFrom: req.body.dateYearFrom,
    dateMonthTo: req.body.dateMonthTo,
    dateYearTo: req.body.dateYearTo,
}; 

Project.findByIdAndDelete(id, (err) =>{
    if(err){
        console.log(err);
    }

    User.findByIdAndUpdate(userid, {$set:project}, {new: true},(err) => {
            if(err){
                 console.log(err)
            }
            console.log('Project Deleted: ' + id)
            res.redirect('/dashboard#/projects');
         });
    });
 };  

非常感谢!

标签: node.jsmongodbmongoosemongoose-schema

解决方案


您可以使用$pull运算符。访问页面了解更多详情。

您的user更新查询应如下所示:

User.findByIdAndUpdate(
  userid,
  { $pull: { projects: id } },
  { new: true }
);

推荐阅读