javascript - 删除帐户时如何从 MongoDB 中正确级联删除辅助对象?
问题描述
用户可以在我的应用程序上创建帐户,并可以点赞、分享 X 帖子。
问题是,每当用户删除他/她的帐户时,与他们相关的所有内容也应该被删除;到目前为止,我已经能够修复大部分问题,但是:
await this.model('Post').updateMany(
{
'sharedby.user': this._id
},
{
$pull: { 'sharedby.user': this._id }
}
);
显然,我使用的是点表示法,因为user
它是模型中 sharedby 对象中的对象之一Post
。这里是:
sharedby: [
{
user: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
},
post: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Post'
}
}
],
只要有share
,就会触发这个函数:
const newshare = await Post.findByIdAndUpdate(
{
_id: req.params.id,
sharedby: { $ne: { user: req.user._id } }
},
{
$push: { sharedby: { user: req.user._id, post: post._id } }
},
{
new: true,
runValidators: true,
setDefaultsOnInsert: true
}
);
差不多就是这样。我真的不知道为什么它不起作用。有什么建议么?谢谢!。
解决方案
由于您想从中删除所有匹配的记录sharedby
,我想您会想要使用$pullAll
. 此外,当使用$pull
or时$pullAll
,您应该只使用点符号直到 Array 边界:
await this.model('Post').updateMany(
{
'sharedby.user': this._id
},
{
$pullAll: { 'sharedby': { user: this._id } }
}
);
另请参阅:从文档数组中删除项目
推荐阅读
- flutter - 动画的不规则行为
- apache-spark - 在火花中将列转换为行
- python - 使用 python argparse 实现主命令以缩短 CLI 调用
- asp.net - IIS 503 错误 - 模块 DLL C:\Windows\SysWOW64\inetsrv\main.dll 无法加载。数据是错误的
- java - UnsatisfiedDependencyException 和循环依赖
- java - 处理长最小值条件
- javascript - 如何删除数据层事件(GTM)?
- c - 将多个采样率馈送到同一个缓冲区源:ffmpeg 过滤器
- amazon-cognito - 如何禁用通过身份提供商创建的 AWS Cognito 用户池帐户?
- puppeteer-sharp - 创建每张多页的 pdf