2011-12-28 25 views
7

Bu kodda, ExecutionResult sonucundaki tüm düğümler üzerinde nasıl yineleyebilirim?Neo4j Cypher: ExecutionResult sonucu yineleme nasıl yapılır?

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 

cevap

8

Cypher için javadoc bu konuda çok açık değildir, muhtemelen yoktur.

Kodunuzu, eşlemedeki düğümlerin özellikleri üzerinde yineleme yapmayı gösteren bir "deneme" de yeniden oluşturdum. Alan, her türün "meyve" düğümüne bağlı olduğu meyvedir. İlgili pasajı sorgusu çalıştırdıktan sonra, şudur:

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)); 
     } 
    } 

O anahtarı olduğuna result.columnAs("x") bu. Akıllıca adlandırılan String n parametresi, sonuç cümlede bir "sütun adı" anlamına gelir. Bu örnekte "x" sütununu istiyoruz ve Node nesnesini içermesini bekliyoruz, bu yüzden Iterator<Node>'a doğrudan atayabilir ve sonra bunu kullanabiliriz. Bu sütun org.neo4j.graphdb.NotFoundException alır.

Yanlış sınıfa atamayı sorarsak, olağan java.lang.ClassCastException'u alırız.

tam çalışma örneği burada bulabilirsiniz: yardımcı https://github.com/akollegger/neo4j-trials/blob/master/src/test/java/org/akollegger/neo4j/trials/richardw/ExecutionResultIteratorTrial.java

Umut.

Alkış, Andreas

+0

size yardımcı olabilir ben http://api.neo4j.org de, hem de görüntülenebilir javadoc bazı temel açıklama ekledik – akollegger

+0

Bunun bir "scala.collection.Iterator" ve bir "java.util.Iterator" olduğunu not etmek önemlidir! – 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

Her satırda x'in tek değeri olduğunda çalışır. X'in tek bir satırda birden fazla değeri varsa, nasıl yineleyeceksiniz? (Örn.) İlk sırada x, mango, portakal, muz altında. Armut, ikinci sırada kiraz. Ben böyle bir sınavla çalışırken, sınıfsal istisna atar. Herhangi bir fikrin var mı? – 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)+ " } "); 
} 

Bu

İlgili konular