2017-04-19 2 views
0

내 그래프 모델에 같은 유형의 다른 노드와 부모/자식 관계가있는 유형 A의 노드가 있다고 가정 해 봅니다. 나는 사이퍼 문 Neo4j OGM 형식의 쿼리로 관련 개체를 필터링하는 방법은 무엇입니까?

MATCH (node:A) WHERE ... OPTIONAL MATCH ... RETURN node, ... ORDER BY node.id ASC LIMIT 100 

같은 지금 어디

session.query(A.class, cypher, parameters) 

(페이징, 필터링, 선택 일치 등을 위해) 복잡한 쿼리를 실행하기 위해 다음과 같은 세션 방법을 사용하고

@NodeEntity(label = "A") 
class A { 
    @Relationship(type = "PARENT") 
    private A parent; 

    // other relations to different types 
    ... 

} 

, 또한 각 결과 (유형 A도)에 대한 부모 노드를 가져 오려고합니다. 이를 위해, 나는 순진하게도 볼 것으로 예상 무엇

MATCH (node:A) WHERE ... OPTIONAL MATCH parentRels=(node)-[parentRel:PARENT*1..]->(:A) RETURN node, collect(parentRel) ORDER BY node.id ASC LIMIT 100 

내 쿼리를 확장 각 상위 필드가 잘 뿌리까지 가득 객체 내 동일한 목록 A가있다. Neo4j에서 반환 한 결과는 정확하지만 OGM에서 반환 한 매핑 결과는 부모 노드가 올바르게 채워진 상태에서 관심있는 노드가 포함되어 있지 않고 부모 노드가 모두 포함되기 때문에 쓸모가 없습니다. 결과 목록에!

그래서 관심 노드가있는 결과 열 (위의 예에서 '노드')을 지정할 수있는 숨겨진 OGM 기능을 찾기 시작했으나 가능하지 않습니다. 내가 볼

유일한 해결 방법은 다음과 같습니다

  • 별도의 쿼리 :(에서 부모 노드를 가져
  • 매핑 자신 :(:(
  • 기반으로 별도의 쿼리 및 필터 관련 ID를 가져 오기를 할 그에.

어쩌면 누군가가 더 나은 솔루션을 본다?

답변

0

그 이유는 부모님도 query 메서드에서 전달한 유형 (A.class)과 일치해야합니다.

OGM은 실제 원하는 결과가 무엇인지 알 수 없으므로 모든 일치하는 노드를 결과에 매핑합니다. 한 행은 결과 목록에 2 개 이상의 항목을 생성 할 수 있습니다. (일부 사람들은 반대의 유스 케이스를 가지고 실제로 그것을 원한다는 것에 유의하십시오.)

당신은 또한 당신이 올바르게 매핑 될 모든 관계 및 관련 노드를 반환 제공, 수동으로 결과 컬럼의 결과를 수집 할 수 있습니다

외에 당신은 또한 수

  • 당신을 나열 것과
    Result result = session.query(cypher, parameters) 
    for(Map<String, Object> map : result.queryResults()) { 
        (A) map.get("node"); // collect result manually to some collection 
    } 
    

    상위 유형에 다른 유형/레이블을 제공하십시오.

  • 부모가 세션에로드되어 전체 경로가 아닌 노드와 관계 만 리턴하도록하십시오. 대신

이 문제를 해결하는 더 좋은 방법은 여기 https://github.com/neo4j/neo4j-ogm/issues의 문제를 작성하는 것이 좋습니다.

+0

답장을 보내 주시면우리가 실제로 동일한 노드 유형을 말하는 것처럼 다른 레이블을 사용하는 것은 옵션이 아닙니다. 당신의 두 번째 옵션에 대해서, 만약 내가 관계를 반환한다면, 나는 노드 afaik를 탐색 할 수 없을 것입니다. 나는이 같은 고립 된 유스 케이스처럼 보이지 않는 문제를 채울거야 ... – Christian

+0

https://github.com/neo4j/neo4j-ogm/issues/351 – Christian

+0

@ 크리스티안 방금 다른 방법으로 기억하고있다 .. 참조하십시오 편집 된 대답 –

관련 문제