2016-12-09 11 views
0

私はグラフデータベースを作成しました。 Vertexと呼ばれるノードがあり、属性はattr1:<float-value>,attr2:<float-value>などです。また、Padreという名前の属性と、それに続く属性attr1:<float-value>,attr2:<float-value>などのノードがあります。今、私は、 2つのノード(ノードのidと一致する2つのint)が与えられている場合、それらの間にパスが存在するかどうかを確認してください。そうであれば、パスの属性の合計を計算します。私はこのコードを試してみたNeo4j&Java - 属性のすべての値を合計する方法

:今

public void res(Session session, int x, int y) { 

    float z = 0F; 
    boolean found = false; 

    while (!found) { 
     if (x == y) { 
      StatementResult res = session.run("MATCH (N:Vertex) WHERE N.ID=" + x +" RETURN PROPERTIES(N)"); 
      Record record = res.next(); 

      for (String a: record.get("PROPERTIES(N)").keys()) { 
       if(a.equals("ID") || a.equals("IdAlbero")) { 
        continue; 
       } 

       Value k = record.get("PROPERTIES(N)").get(a); 
       z += k.asFloat(); 
      } 

      found = true; 
     } else { 
      StatementResult res = session.run("MATCH (N:Vertex) WHERE N.ID=" + x +" RETURN PROPERTIES(N)"); 
      Record record = res.next(); 
      for (String a: record.get("PROPERTIES(N)").keys()) { 
       if(a.equals("ID") || a.equals("IdAlbero")) { 
        continue; 
       } 

       Value k = record.get("PROPERTIES(N)").get(a); 
       z += k.asFloat(); 
      } 

      res = session.run("MATCH (N:Vertex),(M:Vertex), (N) - [R:Padre] ->(M) WHERE N.ID = " + x + " RETURN PROPERTIES(R)"); 
      record = res.next(); 

      for (String a: record.get("PROPERTIES(R)").keys()) { 
       if (a.equals("ID") || a.equals("IdAlbero")) { 
        continue; 
       } 

       Value k = record.get("PROPERTIES(R)").get(a); 
       z += k.asFloat(); 
      } 
     } 
    } 

    System.out.println(z); 
} 

、私はz += k.asFloat()ステートメントにエラーが発生しました。 これはエラーです:

Exception in thread "main" org.neo4j.driver.v1.exceptions.value.Uncoercible: Cannot coerce FLOAT to Java String at org.neo4j.driver.internal.value.ValueAdapter.asString(ValueAdapter.java:84) at Neo4j.res(Neo4j.java:160) at Connessione.connettiti(Connessione.java:27) at Connessione.main(Connessione.java:35).

私は何ができますか?

+0

あなたは性質がフロートとして保存されますか?浮動小数点数に変換しようとしているプロパティの少なくとも1つが文字列として格納されているようです。 Eclipse/NetBeans/IntelliJデバッガを使用して、例外に対する実行を停止し、それがどの値であるかを確認することができます。あるいは、プロパティの名前( 'a')をprintlnするだけで、どのプロパティが例外を引き起こすかを知ることができます。 –

答えて

0

私は多くのJavaを知らないが、あなたはfilterreduceを使用して1サイファー・クエリですべてをフィットすることができます

MATCH (N1:Vertex {id: 1}) 
OPTIONAL MATCH (N1)-[R:Padre]->(N2:Vertex {id:3}) 
WITH N1, FILTER(k in keys(N1) WHERE k<>'id' AND k<>'idAlbero') as kN1, 
    N2, FILTER(k in keys(N2) WHERE k<>'id' AND k<>'idAlbero') as kN2 
WITH N1, kN1, REDUCE(sum1=0.0, k in kN1 | sum1 + toFloat(N1[k])) as sum1, 
    N2, kN2, REDUCE(sum2=0.0, k in kN2 | sum2 + toFloat(N2[k])) as sum2 
WITH N1, kN1, CASE WHEN sum1 IS NULL THEN 0 ELSE sum1 END as sum1, 
    N2, kN2, CASE WHEN sum2 IS NULL THEN 0 ELSE sum2 END as sum2, 
    sum1 + toFloat(sum2) as total 
RETURN N1, kN1, sum1, 
     N2, kN2, sum2, 
     sum1 + sum2 as total 
関連する問題