0

私はスレッド化されたコメント システムを作成しており、階層内の特定のコメントの下にあるコメントの数をカウントする方法を見つけようとしています。現在、各コメント 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 の子、孫などのコメントの数をどのように把握できますか?

4

2 に答える 2

0

私が行った方法は、すべてのコメントを次のように構造化することです。

{
  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、 、ancestors.1、および、たとえば、ancestors.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)
于 2013-04-29T20:24:49.110 に答える