节点js mongoose从文档数组中删除一个id
我有两个参考集合在一起。 其中一个集合是用户,另一个集合是项目。
因此,用户可以将项目添加到项目集合中,然后用户types中的一个称为主pipe可以将人员添加到项目中,并将项目ID保存到参考项目集合中员工文档的用户集合中。
所以实际上,当pipe理员从用户集合中删除一个主pipe时,实际上我需要做的是删除由主pipe用户ID创build的所有项目,这些项目等于从用户集合中删除的addedBy文档。
所以我的问题是,当我做这个过程中,我需要删除所有的项目ID等于用户集合projectId。 这是一个数组,我试图做很多次,但我找不到解决scheme。 我将提供所有的源代码。 我为这个项目创build的。
用户集合
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" }); }); }); });
我觉得问题是
(1) Model.findByIdAndRemove只需要ID(不是条件)即Users.findByIdAndRemove(req.params.id)
而不是Users.findByIdAndRemove({ _id: req.params.id })
(2) Model.remove的callback没有在Projects.remove({ userId: req.params.id }).then(function (err, project) {
的第二个参数Projects.remove({ userId: req.params.id }).then(function (err, project) {
。以及,你没有您的ProjectSchema
userId
字段。
我会做
// 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
。
- MongoDB:你应该多久打开和closures数据库? 为什么?
- 如何使用Node JS驱动程序创build新的MongoDb数据库
- 通过本地networking通过域名而不是IP地址连接到数据库时是否有大量开销?
- Mongoose:CastError:强制转换为ObjectId的path“_id”的值为“”
- Nodejs – 从MongoDB中检查空对象并parsing它
- selectvsfind和在哪里find在Mongoose
- 什么时候使用cursor.forEach()时调用db.close()?
- Mongoose:如何replace一个子文档数组?
- mongodb / mongoose聚合或返回null