在这段代码中,我如何迭代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)
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
希望有所帮助.
干杯,安德烈亚斯