Neo4j 如何从ExecutionResult中单独提取结果?

Neo4j 如何从ExecutionResult中单独提取结果?,neo4j,cypher,Neo4j,Cypher,下面的java代码片段演示了这个问题。我收到的错误也包括在下面。 它正确地拉出了正确的集合,但我在打印时遇到了问题。 我正在使用org.neo4j.graphdb.Node。这是错的班级吗? 如果没有,如何从ExecutionEngine获取结果movieid、avgrating和movie_title Java代码 GraphDatabaseService db = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH); Executi

下面的java代码片段演示了这个问题。我收到的错误也包括在下面。 它正确地拉出了正确的集合,但我在打印时遇到了问题。 我正在使用org.neo4j.graphdb.Node。这是错的班级吗? 如果没有,如何从ExecutionEngine获取结果movieid、avgrating和movie_title

Java代码

GraphDatabaseService db = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH);
ExecutionEngine engine = new ExecutionEngine(db);

String cypherQuery =        "MATCH (n)-[r:RATES]->(m) \n"
                          + "RETURN m.movieid as movieid, avg(toFloat(r.rating)) as avgrating, m.title as movie_title \n"
                          + "ORDER BY avgrating DESC \n"
                          + "LIMIT 20;";

ExecutionResult result = engine.execute(cypher);

for (Map<String, Object> row : result) {
    Node x = (Node) row.get("movie_title");
        for (String prop : x.getPropertyKeys()) {
            System.out.println(prop + ": " + x.getProperty(prop));
        }
    }
…看来是罪魁祸首

在Cypher语句中,您将m.title作为movie_title返回,即返回一个节点属性(在本例中为字符串),并且在有问题的行中,您尝试将该字符串结果强制转换为节点

如果希望Cypher返回一系列可以迭代的节点,请尝试返回m(整个节点),而不仅仅是单个属性和聚合,例如

"...RETURN m AS movie;"
...
Node x = (Node) row.get("movie");
等等

Node x = (Node) row.get("movie_title");
"...RETURN m AS movie;"
...
Node x = (Node) row.get("movie");