我将两个集合的参考集合在一起。其中一个集合是用户,另一个集合是项目。
因此,用户可以将项目添加到项目集合中,然后其中一个名为supervisor的用户类型可以将人员添加到项目中,项目ID保存到用户集合中,该用户集合引用项目集合上的员工文档。
实际上,当管理员从用户集合中删除主管时,我需要这样做,它会删除由主管用户的id创建的所有项目,这些项目等于从users集合中删除的addedBy文档。
所以我的问题是当我做这个过程时我需要删除所有项目id等于用户集合projectId。这是一个阵列,我尝试多次这样做,但我找不到解决方案。我将提供所有源代码。我为这个项目创建的。
用户集合
const userSchema = new Schema({
firstName: {
type: String
},
lastName: {
type: String
},
email: {
type: String
},
username: {
type: String
},
password: {
type: String
},
usertype: {
type: Schema.ObjectId,
ref: 'usertypes'
},
projectId: [{
type: Schema.ObjectId,
ref: 'projects'
}]
});
项目收藏
const proSchema = new Schema({
projectName: {
type: String
},
description: {
type: String
},
addedBy: {
type: Schema.ObjectId,
ref: 'users'
},
staff: [{
type: Schema.ObjectId,
ref: 'users'
}]
});
以下是我尝试执行上述
中提到的过程的查询Users
.findByIdAndRemove({
_id: req.params.id
})
.then(function(){
Projects
.remove({
userId: req.params.id
})
.then(function(err, project){
if(err) throw err;
console.log(project.id)
Users
.update({}, {
$pull: {
projectId: project.id
}
}, function(){
res.json({
success: true,
message: "Deleted"
});
});
});
});
答案 0 :(得分:3)
我认为问题是
(1)Model.findByIdAndRemove只需要ID(不是条件),即Users.findByIdAndRemove(req.params.id)
而不是Users.findByIdAndRemove({ _id: req.params.id })
(2)Model.remove的回调在Projects.remove({ userId: req.params.id }).then(function (err, project) {
中没有第二个参数。同样,您的userId
中没有ProjectSchema
字段。
我愿意
// delete user
Users.findByIdAndRemove(req.params.id, function (err, user) {
console.log('deleting user', user);
if (err)
throw err;
// delete user's projects
Projects.remove({ addedBy: user._id }, function (err) {
console.log('deleting projects');
if (err)
throw err;
// delete project references
Users.update({}, { $pull: { projectId: { $in: user.projectId }}}, function (err) {
console.log('deleting project references');
if (err)
throw err;
res.json({ success: true, message: "Deleted" });
});
});
});
(3)user.projectId
是一个ObjectID数组,因此您需要使用$in
(参见第一个示例)。
除此之外:projects
是比projectId
更好的名称。后者含糊不清,因为用户有多个projects
而非projectId
s。
答案 1 :(得分:0)
User.findByIdAndUpdate(req.params.idRec,
{ $pull: { comments: { _id: comm._id } } },
function (err, doc) {
if (!err) {
res.status(200).send()
} else {
res.render('error', { error: err })
}
})