Neo4j Cypher:如何迭代ExecutionResult结果

Ric*_*rdW 8 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
Run Code Online (Sandbox Code Playgroud)

ako*_*ger 9

Cypher的javadoc对此并不十分清楚,可能是因为没有.

因此,我在"试用版"中重新创建了代码,演示了如何迭代匹配中节点的属性.域是各种水果,其中每种都与"水果"节点相关联.运行查询后,相关代码段为:

    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));
        }
    }
Run Code Online (Sandbox Code Playgroud)

result.columnAs("x")就是关键.巧妙命名的String n参数引用result子句中的"列名".在这个例子中,我们想要"x"列,我们希望它包含Node对象,所以我们可以直接分配给a 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

希望有所帮助.

干杯,安德烈亚斯