node.js - 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');
});
});
};
非常感谢!
解决方案
您可以使用$pull
运算符。访问此页面了解更多详情。
您的user
更新查询应如下所示:
User.findByIdAndUpdate(
userid,
{ $pull: { projects: id } },
{ new: true }
);
推荐阅读
- python-3.x - 在 Python 上转换 CartoDB 地理参考的类型
- java - 进入设置后返回主Activity
- azure - 在 Python 中创建 Azure 证书
- java - Java 8+ 如何将方法引用推断为消费者?
- python - 如何删除带有负数的行
- vhdl - 在许多进程中分配信号
- javascript - 当除数之和适合条件时,并非显示每个数字
- angular - 角度 6:模板驱动使用 json 创建表单以及如何处理多个复选框
- javascript - 如何使用我指定的公式将 html 表格转换为 excel 文件?
- java - 对 JavaPairDStream 进行排序