2013-04-29 1 views
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 등, 얼마나 많은 의견 아이들, 손자를 알아낼 것입니다 :

이 다이어그램을 가지고?

답변

0

내가 그것을 한 적이 방식은 모든 의견과 같이 구조입니다. 최초의 조상은

그래서 당신이 보이는 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) 
+0

재미있는 코멘트를 작성하는 방법에 대한 간단한 예, 있어요하지만, 나는 아직도 약간 혼란 스럽다. 3.2에 대한 조상 배열을 어떻게 만들겠습니까? – user1816679

+0

아플 설명에서 설명하기가 어렵 기 때문에 편집을 추가하십시오 –

+0

또한 스키마를 변경해야합니다. –

2

스키마 변경을 고려하십시오. here에는 계층 구조를 저장하는 방법과 계층 구조를 쿼리하는 방법이 나와 있습니다. 부모가 직접 부모와 조상의 조상 체인 위의 모든 부모의 의견이다

{ 
    parent: _id, 
    ancestors: [_id, _id] 
} 

:

관련 문제