2011-12-28 2 views
7

이 코드에서 ExecutionResult 결과의 모든 노드를 반복 할 수 있습니까?Neo4j Cypher : ExecutionResult 결과를 반복하는 방법

CypherParser parser = new CypherParser(); 
ExecutionEngine engine = new ExecutionEngine(graphDb); 
Query query = parser.parse("START n=node(2) MATCH (n)<-[:IS_A]-(x) RETURN x"); 
ExecutionResult result = engine.execute(query); 
// iterate over nodes in result and print all properties 

답변

8

사이퍼에 대한 javadoc은 이에 대해 명확하지 않습니다.

그래서 일치 항목의 노드 속성을 반복하는 방법을 보여주는 "trial"에서 코드를 다시 작성했습니다. 도메인은 과일의 종류이며, 각 종류는 "과일"노드에 연결됩니다. 관련 조각은 쿼리를 실행 한 후, 이것이다 :

Iterator<Node> kindsOfFruit = result.columnAs("x"); 
    while (kindsOfFruit.hasNext()) { 
     Node kindOfFruit = kindsOfFruit.next(); 
     System.out.println("Kind #" + kindOfFruit.getId()); 
     for (String propertyKey : kindOfFruit.getPropertyKeys()) { 
      System.out.println("\t" + propertyKey + " : " + 
       kindOfFruit.getProperty(propertyKey)); 
     } 
    } 

그것은 열쇠 그 result.columnAs("x")입니다. 교묘하게 명명 된 String n 매개 변수는 결과 절의 "열 이름"을 참조합니다. 이 예에서는 "x"열이 필요하고 Node 개체가 포함될 것으로 기대하므로 Iterator<Node>에 직접 할당하여 사용할 수 있습니다.

열을 찾을 수없는 경우 org.neo4j.graphdb.NotFoundException이 표시됩니다.

잘못된 수업에 과제를 요청하면 보통 java.lang.ClassCastException이됩니다.

전체 작업 예제는 여기에 있습니다 : 도움이 https://github.com/akollegger/neo4j-trials/blob/master/src/test/java/org/akollegger/neo4j/trials/richardw/ExecutionResultIteratorTrial.java

희망.

건배, 안드레아스

+0

당신을 도울 수있는 나는 http://api.neo4j.org에서뿐만 아니라 볼 수 javadoc 내에서 몇 가지 기본적인 설명을 추가했습니다 – akollegger

+0

이것은 'scala.collection.Iterator'이며 java.util.Iterator가 아니라는 점에주의해야합니다 !!! – jocull

2
for (Map<String,Object> row : result) { 
    Node x = (Node)row.get("x"); 
    for (String prop : x.getPropertyKeys()) { 
     System.out.println(prop +": "+x.getProperty(prop)); 
    } 
} 
+0

x가 각 행에 단일 값을 가질 때 작동합니다. x가 한 행에 여러 값을 가지고 있다면, 어떻게 반복 할 것인가? (예를 들어). x, 망고, 오렌지, 바나나 아래 첫 번째 행에. 배, 체리 두 번째 줄에. 그와 같은 예를 가지고 일하면 클래스 캐스팅 예외가 발생합니다. 너는 어떤 생각을 가지고 있니? – priya

1
Iterator<Object> columnAs = result.columnAs("n"); 
while(columnAs.hasNext()) 
{ 
Node n = (Node)columnAs.next(); 
for (String key : n.getPropertyKeys()) { 
sysout("{ " + key + " : " + n.getProperty(key)+ " } "); 
} 

관련 문제