TLDR;您应该使用子文档还是关系ID?
这是我的Post
架构:
const Post = new mongoose.Schema({
title: {
type: String,
required: true
},
body: {
type: String,
required: true
},
comments: [Comment.schema]
})
这是我的Comment
架构:
const Comment = new mongoose.Schema({
body: {
type: String,
required: true
}
})
在Postgres中,我在post_id
中会有一个Comment
字段,而不是在Post
中有一系列评论。我相信你可以在MongoDB中做同样的事情,但我不知道哪一个更传统。如果人们在MongoDB中使用子文档而不是引用(和连接表),那为什么呢?换句话说,我为什么要使用子文档?如果它有利,我也应该在Postgres中做同样的事情吗?
答案 0 :(得分:0)
我从你的问题中理解,基于此回答。
如果您保留sub documents
,则无需查询两个表即可了解comments specific to one post
。
假设我们发布了以下数据库结构: -
[{
_id:1,
title:'some title',
comments:[
{
...//some fields that belongs to comments
} ,
{
...//some fields that belongs to comments
} ,
...
]
},
{
_id:2,
title:'some title',
comments:[
{
...//some fields that belongs to comments
} ,
{
...//some fields that belongs to comments
} ,
...
]
}]
现在,您可以根据_id
(1)的post
进行查询,并且可以获得属于特定帖子的comments array
。
如果您只保留comment's id
内部帖子,则必须查询两个表格,我认为这不是一个好主意。
编辑: -
如果您将post id
保留在comments
记录中,那么它将帮助您跟踪哪个帖子的评论,即您是否要根据post id
查询评论表只需要评论记录中的字段。
我认为,用例将是哪个帖子包含所有评论。因此,在帖子中保留评论将为您提供评论字段以及帖子记录中的字段。
因此,这完全取决于您的要求,您将如何设计数据结构。