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

Posted

技术标签:

【中文标题】MongoDB 中单个父注释中的嵌套(子)注释【英文标题】:Nested (children) comments within a single parent comment in MongoDB 【发布时间】:2013-05-18 09:50:23 【问题描述】:

问题:我是否将我的子 cmets 嵌套在单个父评论中?

概述:

创建评论系统

评论可以有孩子

现在,每个评论子项或父项都作为一条记录存储在名为 SubmissionCommentsSchema 的集合中

子 cmets 的键 => 值为 parent_id => Object ID,其中 Object ID 引用具有 parent_idnull 的父评论。

架构如下:

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' ,
在将这些提供给视图时,我将它们全部拉回并循环查看它们以查看哪些具有 parent_ids !== null。如果是这样,那么我将它们放在一个列表中并将它们附加到父评论中,然后将它们转储到视图中。

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

【问题讨论】:

嗨,鲍勃,你最后用的是什么? @ParagJadhav 我最终将 Sequelize.js 与 Postgres 一起使用。 【参考方案1】:

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

但是,您可能想要做的是向 cmets 添加一个整数 depth 字段,这样您就可以轻松地获取前 2 个级别,显示它们,然后仅在用户展开评论树时加载后续级别.

有时还值得维护一组祖先 ID,这样您就可以快速获取任何子树,或者提供指向特定评论的深层链接可以快速找出您需要在其“上方”加载哪些 cmets 以显示包含它的最小扩展评论树。

【讨论】:

嗯,很有趣。即使他们将(仅)深层次,我也应该这样做吗?家长 > 孩子 |孩子|孩子|孩子 如果它们永远只有一层,那么你就不需要祖先数组或深度,如果你能保证只有一小部分,那么你可以继续并嵌入它们,当然。

以上是关于MongoDB 中单个父注释中的嵌套(子)注释的主要内容,如果未能解决你的问题,请参考以下文章

HTML基础

MongoDB - 仅当嵌套数组中的所有条目存在时才更新它们

PHP遍历函数将单个数组转换为带有子元素的嵌套数组 - 基于父ID

DOM节点

java中的嵌套多行注释

Django REST Framework 序列化程序中的嵌套注释字段