我可以在您的 Github 存储库中看到,您使用 规范化数据模型 来构建模型,就像在关系数据库中一样(注意:您在问题中将关系数据库命名为“SQL 数据库”):: p>
示例:
在 Topic.js 中,您引用 Posts with reference :
posts: [
{
type: mongoose.Schema.Types.ObjectId,
ref: 'Post',
},
],
当然可以,但使用 NoSQL,特别是 MongoDB,您可以将文档嵌入到另一个文档中。
为什么不直接将 Post 模式嵌入到 Topic 中:
posts: [
{
title: {
type: String,
required: true,
},
body: {
type: String,
required: true,
},
...
upvotes: [
{
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
},
],
comments: [
{
type: mongoose.Schema.Types.ObjectId,
ref: 'Comment',
},
],
},
],
据我所知,如果删除了某个主题,则必须删除与该主题相关的所有帖子。
使用嵌入式架构,您只需进行一次删除操作。
我不知道在您的上下文中嵌入是否是最好的解决方案(因为 perfs),但您有两个解决方案:
- 使用不同的架构(您的模型文件),您必须手动
级联删除(例如:当你删除一个主题时,你必须
找到该主题的所有帖子引用并将其删除...)
- 重构和嵌入:有了它,删除主题也删除了评论。
有关嵌入式架构的更多信息,请参阅 mongodb 官方文档:https://docs.mongodb.com/manual/core/data-model-design/