私が行った方法は、すべてのコメントを次のように構造化することです。
{
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)