0

頂点のすべてのプロパティをマップに配置し、このマップに値を追加しようとしています。後で、このマップを JSON レスポンスとして返したいと思います。一般に、neo4j のREST-APIは少し冗長であり、他の値の中で頂点の ID が必要です。したがって、gremlin クエリを介して直接これを行うことにしました。

結果は次のようになります。

[ {"id": 1, "name": "Name1"}, {"id": 2, "name": "Name2"} ]

次のgremlinスクリプトを使用してこれを行うことができました:

x = [];
g.v( 1 ).out.transform{
                     m = [:];
                     m.putAll( it.map() );
                     m.put( "id", it.id );
                     x.add( m )
                    }.iterate();
x

ただし、neo4j コミュニティ 1.8.2 および 1.9M05 では、このクエリで問題が発生しました。

a) neo4j 1.8.2 は、JSONObject の JSONArray ではなく、String の JSONArray を返します。

[ "{id: 1, name: Name1}", "{id: 2, name: Name2}" ]

b) neo4j 1.9M5 は例外を返します。

{
  "message":"Invalid list type: map",
  "exception":"IllegalStateException",
  "stacktrace":
      [
        "org.neo4j.server.rest.repr.RepresentationFormat.serializeList(RepresentationFormat.java:65)",
        "org.neo4j.server.rest.repr.ListRepresentation.serialize(ListRepresentation.java:50)",
        "org.neo4j.server.rest.repr.OutputFormat.assemble(OutputFormat.java:179)",
        "org.neo4j.server.rest.repr.OutputFormat.formatRepresentation(OutputFormat.java:131)",
        "org.neo4j.server.rest.repr.OutputFormat.response(OutputFormat.java:117)",
        "org.neo4j.server.rest.repr.OutputFormat.ok(OutputFormat.java:55)",
        "org.neo4j.server.rest.web.ExtensionService.invokeGraphDatabaseExtension(ExtensionService.java:122)",
        "java.lang.reflect.Method.invoke(Method.java:597)"
      ]
}

gremlin スクリプトを修正して x をマップに変更すると、neo4j の両方のバージョンで動作します。

x = [:];
g.v( 1 ).out.transform{
                     m = [:];
                     m.putAll( it.map() );
                     m.put( "id", it.id );
                     x.put(it.id, m );
                    }.iterate();
x

戻り値

{ "1" : {"id": 1, "name": "Name1"}, "2" : {"id": 2, "name": "Name2"} }

ただし、結果は、JSONObjects を含む JSONObject になります。

gremlin を使用して問題を解決する方法はありますか? 2日前にグレムリンの学習を始めたばかりです。

4

1 に答える 1