1

特定のクエリを作成するために、neo4j でサーバー プラグインを作成しようとしていますが、1 つのイテラブルではなく、Node.js の 2 つのイテラブルを返したいと考えています。

neo4j ドキュメントによると、これは不可能であることがわかったので、これらの配列から JSONObject の配列を作成し、それをサーバー プラグインの結果として返そうとしました。しかし、これはうまくいかないようです。

それで、誰かがすでにそのようなことをしたかどうか尋ねていますか?

neo4j google groupで Gremlin を使用するように言われましたが、これまで使用したことがなく、少し複雑だと思います。

どんな助けでも大歓迎です。

ありがとう

4

1 に答える 1

2

一意のリストを返す前に、返したい2つのリストをマージすることで、最終的に問題を回避しました。したがって、それぞれの開始位置がわかっているため、Python コードでそれらを分離できます。

public class Ond extends ServerPlugin {

@PluginTarget(GraphDatabaseService.class)
public static Iterable<Node> getOnd(
        @Source GraphDatabaseService graphDb,
        @Description("the airline's node ID") @Parameter(name = "id") int id) {

    List<Node> results= new ArrayList<Node>();

    String n4jQuery= "START al= node("+id+") match ond-[:operatedBy]->al, ond-[:origin]->orig, ond-[:destination]->dest RETURN orig, dest ;"; 

    ExecutionEngine engine= new ExecutionEngine(graphDb);
    ExecutionResult result= engine.execute(n4jQuery);
    List<Node> orig= new ArrayList<Node>();
    List<Node> dest= new ArrayList<Node>();

    //creating the lists i want to return
    //an outter loop over tables rows
    for (Map<String, Object> row : result) {
    //an inner loop over the two columns : orig and dest
        for (Map.Entry<String, Object> column : row.entrySet()) {

            String key = column.getKey();
            Node n = (Node) column.getValue();
            if(key.equals("dest")){
                dest.add(n);
            }else{
                orig.add(n);
            }
        }

    }

      //merging the two lists
    results.addAll(orig);
    results.addAll(dest);

      // orig elements are between indices 0 and size(results)/2 -1 
      //and dest element are between size(results)/2 and size(results)-1
    return results;
}

}

それが役に立てば幸い !!

于 2013-05-19T07:35:03.023 に答える