帖子收藏
Post :
_id : 001,
comments : [1,2,3] // ObjectId
评论收藏
Comment:
{ _id : 1, message : "Bar" },
{ _id : 2, message : "Foo" },
{ _id : 3, message : "Bazz" }
我想删除帖子以及该帖子的所有评论。但如何删除其所有评论呢?
更新
后架构
{
model: String,
stock: Number,
images: [String],
price: Number,
views: { type: Number, default: 1 },
commentsCount: { type: Number, default: 0 },
comments: [{ type: Schema.Types.ObjectId, ref: "postComments" }],
postedBy: { type: String, ref: "publisherInfo" }
},
postComments 架构
{
sender: String,
createAt: { type: Date, default: Date.now },
votes: { type: Number, default: 0 },
contain: String
},
最佳答案
您可以使用 findByIdAndDelete 来删除文档并返回它。 现在我们可以动态创建一个评论 id 数组,并将其与 deleteMany 和 $in 运算符一起使用。所以我们只使用了两个数据库访问。
router.delete("/posts/:id", async (req, res) => {
try {
const result = await Post.findByIdAndDelete(req.params.id);
let commentIds = result.comments.map((c) => c._id);
await Comment.deleteMany({
_id: {
$in: commentIds,
},
});
res.send("OK");
} catch (err) {
console.log(err);
res.status(500).send("Something went wrong");
}
});
如果帖子删除成功,但由于技术原因无法删除评论,您可以考虑使用transactions以便操作要么成功,要么失败。
关于mongodb - 如何删除MongoDB中的多个关系文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61046295/