MongoDB中单个父注释中的嵌套(子)注释

MongoDB中单个父注释中的嵌套(子)注释,mongodb,database-design,mongoose,database,nosql,Mongodb,Database Design,Mongoose,Database,Nosql,问题:我是否将我的孩子的评论嵌套在单亲评论中 概述: 创建评论系统 评论可以有孩子 现在,每个注释子项或父项作为一条记录存储在名为SubmissionCommentsSchema 子注释的键=>值为parent\u id=>对象id,其中对象id引用的父注释的parent\u id值为null 架构如下所示: SubmissionCommentsSchema = new Schema({ id : Schema.ObjectId, submission_id : { type

问题:我是否将我的孩子的评论嵌套在单亲评论中

概述:

  • 创建评论系统

  • 评论可以有孩子

  • 现在,每个注释子项或父项作为一条记录存储在名为
    SubmissionCommentsSchema

  • 子注释的键=>值为
    parent\u id
    =>
    对象id
    ,其中
    对象id
    引用的父注释的
    parent\u id
    值为
    null

架构如下所示:

SubmissionCommentsSchema = new Schema({
  id : Schema.ObjectId,
  submission_id : {
    type: String
  },
  parent_id : {
    type: String,
    default: null
  },
  comment : {
    type: String,
    required: true
  },
  user_id: {
    type: String,
    required: true
  },
  username : {
    type: String,
    required: true
  },
  created : {
    type: Date,
    default: Date.now
  },
  reply : {
    type: Boolean,
    default: false,
    required: true
  },
  deleted : {
    type: Boolean,
    default: false
  }
});
父注释的示例:

  { submission_id: '51899313634afe0000000051',
    comment: 'asdfadsf',
    user_id: '516e173f48670b44d20004dc',
    username: 'bobcobb',
    _id: 51899338634afe0000000055,
    deleted: false,
    reply: false,
    created: Tue May 07 2013 16:50:16 GMT-0700 (PDT),
    parent_id: null },
  { submission_id: '51899313634afe0000000051',
    comment: 'Testing one two four',
    user_id: '516b45f8ac6a1b488e000001',
    username: 'testing',
    _id: 519d93a83867470000000146,
    deleted: false,
    reply: false,
    created: Wed May 22 2013 20:57:28 GMT-0700 (PDT),
    parent_id: '51899338634afe0000000055' },
引用上述父注释的子注释示例:

  { submission_id: '51899313634afe0000000051',
    comment: 'asdfadsf',
    user_id: '516e173f48670b44d20004dc',
    username: 'bobcobb',
    _id: 51899338634afe0000000055,
    deleted: false,
    reply: false,
    created: Tue May 07 2013 16:50:16 GMT-0700 (PDT),
    parent_id: null },
  { submission_id: '51899313634afe0000000051',
    comment: 'Testing one two four',
    user_id: '516b45f8ac6a1b488e000001',
    username: 'testing',
    _id: 519d93a83867470000000146,
    deleted: false,
    reply: false,
    created: Wed May 22 2013 20:57:28 GMT-0700 (PDT),
    parent_id: '51899338634afe0000000055' },
  • 当我把它们提供给一个视图时,我会把它们全部拉回来,并在它们之间循环,看看哪个有
    parent\u id
    s!==<代码>空值。如果是这样的话,我会将它们放在一个列表中,并将它们附加到父注释中,然后将它们转储到视图中

我是否应该将原始父注释中的子注释作为嵌套数组存储?

可能不会,因为如果某个特定线程收到许多回复,您可能会超出文档大小限制

但是,您可能希望在注释中添加一个整数
深度
字段,这样您就可以轻松地获取(比如)前2个级别,显示它们,然后仅在用户展开注释树时加载后续级别


有时,维护祖先ID数组也很值得,这样您就可以快速获取任何子树,或者给定特定注释的深度链接,您就可以快速确定需要在其“上方”加载哪些注释,以显示包含该注释的最小扩展注释树。

Hmm有趣。我应该这样做,即使他们将(只有)水平深?Parent>child | child | child | child如果它们只有一层深度,那么你不需要祖先数组或深度,如果你能保证只有少量,那么你可以继续嵌入它们,当然。嗨,鲍勃,你最终使用了什么?