В моем приложении есть пользователь, содержащий массив проектов, и когда я нажимаю, чтобы открыть один проект, у меня появляется кнопка «удалить», чтобы я мог удалить этот проект (по его идентификатору). Это работает, но моя проблема: Я могу удалить проект из базы данных, но я не могу удалить этот проект из проектов массива пользователей, где он хранит идентификатор проекта.
Вот моя схема пользователя:
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);
и моя серверная сторона: Думаю, я все неправильно понял! Это было то, что я пытался сделать, найдя этот проект по идентификатору и удалению, а затем обнаружив пользователя по идентификатору и обновлению, но это не сработало.
//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.info(err);
}
User.findByIdAndUpdate(userid, {$set:project}, {new: true},(err) => {
if (err){
console.info(err)
}
console.info('Project Deleted: ' + id)
res.redirect('/dashboard#/projects');
});
});
};
Большое спасибо!





Вы можете использовать оператор $pull. Посетите страницу это для получения более подробной информации.
Ваш запрос на обновление user должен выглядеть так:
User.findByIdAndUpdate(
userid,
{ $pull: { projects: id } },
{ new: true }
);
Теперь это работает! Мой результат:
app.delete('/dashboard/project/:id/edit', (req, res) => {
let id = req.params.id;
let userid = req.user._id;
Project.findByIdAndDelete(id, (err) =>{
console.info('deleting project', id)
if (err){
console.info(err);
}
User.findByIdAndUpdate(
userid,
{ $pull: { projects: id} },
{ new: true },(err) => {
if (err){
console.info(err)
}
console.info('Project Deleted: ' + id)
res.redirect('/dashboard#/projects');
})
})
};