8

このコードで、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

4 に答える 4

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たパラメーターは、結果句の「列名」を参照します。この例では、「x」列が必要で、そこにオブジェクトが含まれていると予想されるNodeため、直接 an に割り当ててから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 で入手できます。

それが役立つことを願っています。

乾杯、アンドレアス

于 2011-12-29T15:57:28.753 に答える
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));
   }
}
于 2012-02-04T23:58:41.430 に答える
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)+ " } ");
}

これはあなたを助けるかもしれません

于 2012-08-28T12:59:36.553 に答える