MongoDB:使用子文档

时间:2016-06-24 10:47:15

标签: mongodb

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中做同样的事情吗?

1 个答案:

答案 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查询评论表只需要评论记录中的字段。

我认为,用例将是哪个帖子包含所有评论。因此,在帖子中保留评论将为您提供评论字段以及帖子记录中的字段。

因此,这完全取决于您的要求,您将如何设计数据结构。