2013-11-27 1 views
-1

특정 쿼리에 대한 도움이 필요합니다. neo4j를 사용하고 있습니다. 내 데이터베이스는 회사 (노드)와 트랜잭션 (관계)으로 구성됩니다. 각 관계 (지불)는 특성이있다 : - 년 거래의 월 - 거래 금액 년 amount- 나는, 노드 (A)에서 시작하여, 그래프에있는 모든 사이클을 찾는 것이 필요한 것은 거래사이퍼를 통한 특정 쿼리

의 달이 트랜잭션이 차례로 발생했음을 나타내야합니다.

유효한 예는 3 월 PIAD B, 4 월 PAID C, 6 월 PAID A입니다.

노드 A에서 모든주기를 가져 오는 방법이 있습니까? 그러면 트랜잭션이 연속 된 순서로 발생합니까?

답변

0

Neo4j console에 샘플 그래프를 설정하여 사용중인 Neo4j의 버전을 공유하거나 적어도 더 많이 알려줄 수 있습니다. 그러나 2.0을 사용하고 있고 연도와 월을 긴 정수로 저장하는 경우, 추가 사항은 물론 그런 식으로 작동하지 않습니다, 는 사실 그 조급했지만, 구조는 확인을해야 : 어쩌면 당신은

MATCH a-[ab:PAID]->b-[bc:PAID]->c-[ca:PAID]->a 
WHERE (ab.year + ab.month) > (bc.year + bc.month) > (ca.year + ca.month) 
RETURN a,b,c 

편집 같은 것을 시도 할 수 있습니다. 어쩌면

WHERE ((ab.year > bc.year) or (ab.year = bc.year AND ab.month > bc.month)) 
    AND ((bc.year > ca.year) OR (bc.year = ca.year AND bc.month > ca.month)) 

또는

WHERE (ab.year * 12 + ab.month) > (bc.year * 12 + bc.month) > (ca.year * 12 + ca.month) 

만 비교 이러한 유형의 날짜를 사용하는 경우

은 아마도 '시대'1/1 -70 GMT 이후 밀리 초 단위로, 하나 개의 속성으로 그들을 저장하는 것이 좋습니다. 따라서 비교가 매우 쉽습니다. 그러나 날짜를 자주 반환하고 표시해야하는 경우 날짜를 자주 구분해야하는 것이 좋습니다.

EDIT2 : 나는 모든 변수 깊이주기를 일치하고 일부를 폐기 의미 패턴으로 "r1.date < r2.date"당신의 상태를 구축 할 수있는 방법을 생각할 수 없다
(대부분의) 그들의. 큰 그래프에서는 비싸지 않을 것이며, 순회 중에 복잡한 반복적 인 결정을 내릴 수있는 순회 또는 서버 플러그인을 만드는 것이 더 나을 것입니다. 2.0, 웨스 '우아한 수집 슬라이스 덕분에, 당신은 아마 HEAD()TAIL() 1.9에서 얻을 수있는 동일이

MATCH path=a-[ab:PAID*..10]->a 
WHERE ALL (ix IN range(0,length(ab)-2) 
    WHERE ((ab[ix]).year * 12 +(ab[ix]).month)<((ab[ix+1]).year * 12 +(ab[ix+1]).month)) 
RETURN path 

뭔가를 시도 할 수 있습니다. 다시 콘솔의 샘플 데이터를 공유하면 다른 사람이 참여할 수 있습니다.

+0

neo4j 1.9를 사용하고 있습니다. 이 쿼리는 괜찮지 만 세 노드가 포함 된 사이클에만 적용됩니다. 범용으로 만들 수있는 방법이 있습니까? 그래서 한 쿼리는 크기 3뿐 아니라 모든 크기의 모든 사이클을 반환합니까? – user3041466

+0

여전히 샘플 그래프 또는 모델에 대한 세부 정보 또는 지금까지 시도한 내용을 공유하지 않았습니다. 그것이 너무 많은 일이라면 지원비를 지불하는 것을 고려할 수 있습니다. – jjaderberg