Neo4j Cypher:如何迭代ExecutionResult

Neo4j Cypher:如何迭代ExecutionResult,neo4j,cypher,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.ex

在这段代码中,如何迭代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
CypherParser=新的CypherParser();
ExecutionEngine=新的ExecutionEngine(graphDb);

Query Query=parser.parse(“START n=node(2)MATCH(n)javadoc for Cypher对此不是很清楚,可能是因为没有

因此,我在一个“试用版”中重新创建了您的代码,演示了如何迭代匹配中节点的属性。域是各种水果,其中每种水果都链接到“水果”节点。运行查询后,相关片段如下:

    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));
        }
    }
迭代器kindsofruit=result.columns(“x”); while(kindsofruit.hasNext()){ 节点kindofruit=kindsofruit.next(); System.out.println(“Kind#”+kindofruit.getId()); for(字符串propertyKey:kindofruit.getPropertyKeys()){ System.out.println(“\t”+propertyKey+”:“+ Kindofruit.getProperty(propertyKey)); } }
关键是
result.columnAs(“x”)
。巧妙命名的
String n
参数引用result子句中的“列名”。在本例中,我们希望“x”列包含
节点
对象,因此我们可以直接分配给
迭代器
,然后使用它

如果找不到该列,我们将得到一个
org.neo4j.graphdb.NotFoundException

如果我们要求分配给错误的类,我们将得到通常的
java.lang.ClassCastException

此处提供了完整的工作示例:

希望有帮助

干杯, Andreas

for(地图行:结果){
Node x=(Node)row.get(“x”);
对于(字符串属性:x.getPropertyKeys()){
System.out.println(prop+“:”+x.getProperty(prop));
}
}
迭代器columnAs=result.columnAs(“n”);
while(columns.hasNext())
{
Node n=(Node)columns.next();
for(字符串键:n.getPropertyKeys()){
sysout(“{+key+”:“+n.getProperty(key)+”}”);
}

在更新版本的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();
Driver-Driver=GraphDatabase.Driver(“bolt://localhost:7687,AuthTokens.basic(“neo4j”、“neo4j”);
Session Session=driver.Session();
列表团队=新建ArrayList();

语句result cursor=session.run(“匹配(l:联赛)我在javadoc中也添加了一些基本的解释,可以在上查看。需要注意的是,这是一个
scala.collection.Iterator
,而不是
java.util.Iterator
!!!当x在每行中有一个值时,它会起作用。如果x在一行中有多个值,您将如何迭代?(例如).第一排是x,芒果,橘子,香蕉。第二排是梨,樱桃。当我用这样的例子工作时,它会给我一个类播异常。你知道吗?
Iterator<Object> columnAs = result.columnAs("n");
while(columnAs.hasNext())
{
Node n = (Node)columnAs.next();
for (String key : n.getPropertyKeys()) {
sysout("{ " + key + " : " + n.getProperty(key)+ " } ");
}
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();