Node.js 如何计算树中的所有评论?

Node.js 如何计算树中的所有评论?,node.js,mongodb,Node.js,Mongodb,我正在编写一个线程注释系统,并试图找出一种计算层次结构中任何给定注释下面有多少注释的方法。到目前为止,每个comment JSON对象都有一个名为hasChildren的属性,该属性是一个整数,每当有人回复该注释时,该值都会递增。这意味着hasChildren只跟踪直接回复,而不跟踪回复 以这个图表为例: OP--1.1--2.1--3.1 | 1.2--2.2--3.2--4.1 | | | 4.2--5.1 | 3.3--4

我正在编写一个线程注释系统,并试图找出一种计算层次结构中任何给定注释下面有多少注释的方法。到目前为止,每个comment JSON对象都有一个名为hasChildren的属性,该属性是一个整数,每当有人回复该注释时,该值都会递增。这意味着hasChildren只跟踪直接回复,而不跟踪回复

以这个图表为例:

OP--1.1--2.1--3.1
 |  
 1.2--2.2--3.2--4.1
      |    |
      |    4.2--5.1
      |
      3.3--4.3--5.2

如何计算注释1.2中有多少注释是子注释、孙子注释等?

请考虑更改您的模式。这里有一个很好的例子,展示了如何存储层次结构以及如何查询层次结构。

我这样做的方式是对每个注释进行如下结构:

{
  parent: _id,
  ancestors: [_id, _id]
}
其中parent是直接父级,祖先是祖先链上方的每个父级注释。第一个祖先不应该是评论(帖子)

假设您的注释1.2看起来是这样的:

comment = {
  _id: _id,
  parent: OP._id,
  ancestors: [OP._id]
}
儿童:

db.comments.find({
  'parent': comment._id,
})
孙辈:

db.comments.find({
  'ancestors.1': comment._id,
  'ancestors': {
    $size: 3
  }
})
所有后代:

db.comments.find({
  'ancestors.1': comment._id
})
然后,对于索引,您可以执行
parent
祖先.1
,也可以执行
祖先.6

创建评论 下面是一个关于如何创建注释的简化示例

function Comment(parent) {
  this.parent = parent._id
  this.ancestors = (parent.ancestors || []).concat(parent._id)
}

var comment = new Comment(originalPost)
var child = new Comment(comment)
var grandchild = new Comment(child)

有意思,但我还是有点困惑。您将如何为注释3.2构建祖先数组?此外,这将需要更改您的模式。