1

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

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

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

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

任何帮助将不胜感激。

谢谢

4

1 回答 1

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 回答