Neo4j Cypher:如何迭代ExecutionResult结果

时间:2011-12-28 01:29:59

标签: 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

4 个答案:

答案 0 :(得分: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));
        }
    }

这是关键result.columnAs("x")。巧妙命名的String n参数引用result子句中的“列名”。在这个例子中,我们想要“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

希望有所帮助。

干杯, 安德烈亚斯

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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

这可能会帮助你

答案 3 :(得分:1)

在较新版本的java驱动程序中,可以像这样遍历。

Driver driver = GraphDatabase.driver("bolt://localhost:7687", AuthTokens.basic("neo4j", "neo4j"));
Session session = driver.session();
List<String> teams = new ArrayList<>();

StatementResult cursor = session.run("match (l:League)<-[]-(t:Team) return t.short_name");
while (cursor.hasNext()) {
    teams.add(cursor.next().get(cursor.keys().get(0)).toString());
}

session.close();
driver.close();