从neo4j中的服务器插件返回JSONObject

时间:2013-05-16 11:35:39

标签: neo4j cypher gremlin

我正在尝试在neo4j中创建一个服务器插件来进行特定的查询并希望返回,而不是一个可迭代的,而是两个Node的迭代。

我看到根据neo4j文档这是不可能的,所以我尝试从这些数组创建一个JSONObject数组,然后将其作为服务器插件结果返回。但似乎这不起作用。

所以我问是否有人做过这样的事情?

我在neo4j google group被告知要使用Gremlin,但之前从未使用它,并认为它有点复杂。

非常感谢任何帮助。

谢谢

1 个答案:

答案 0 :(得分: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;
}

}

希望它有所帮助!!