我有以下猫鼬用户模式:
postCreated:{
type: Array,
default: []
}
包含属于该用户的帖子对象数组。我计划执行以下操作:删除特定帖子时,我将该帖子的ID和创建的用户的用户名传递给后端,并希望它将从Post模式和postCreated中删除该帖子。属于的用户
server.del('/posts',(req,res,next)=>{
const {id,username} = req.body;
User.findOne({username}).then(user => {
console.log(user.postCreated)
user.postCreated.filter(post => {
post._id !== id;
});
console.log(user.postCreated)
});
Posts.findOneAndRemove({_id: id}).then((post) => {
if(!post){
return next(new errors.NotFoundError('Post not found'));
}
res.send(post);
})
.catch((e) => {
return next(new errors.BadRequestError(e.message));
});
});
但是,该帖子仅从Post Model中删除,而没有从User Model的postCreated中删除,这意味着user.postCreated.filter不起作用。
由于杰克,我尝试了以下方法,但似乎无法解决问题:
User.update(
{ username },
{ $pull: { postCreated: {_id: id} } },
{ multi: true }
);
有什么办法可以解决这个问题?
我将非常感谢您的帮助。
答案 0 :(得分:2)
如果要按照自己的方式进行操作,则需要将postCreated数组自身存储回去,然后保存用户:
User.findOne({username}).then(user => {
console.log(user.postCreated)
user.postCreated = user.postCreated.filter(post => {
post._id !== id;
});
console.log(user.postCreated);
user.save();
});
但是如果以后需要用户对象,最好的方法是findOneAndUpdate。
答案 1 :(得分:1)
使用:https://docs.mongodb.com/manual/reference/operator/update/pull/
User.update(
{ username },
{ $pull: { postCreated: id } },
{ multi: true }
);
这应该可以解决您的查询。