Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从neo4j中的服务器插件返回JSONObject_Neo4j_Cypher_Gremlin - Fatal编程技术网

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

从neo4j中的服务器插件返回JSONObject,neo4j,cypher,gremlin,Neo4j,Cypher,Gremlin,我试图在neo4j中创建一个服务器插件来进行特定的查询,并希望返回的不是一个iterable,而是节点的两个iterable 根据neo4j文档,我发现这是不可能的,所以我尝试从这些数组中创建一个JSONObject数组,然后将其作为服务器插件结果返回。但这似乎不起作用 所以我在问是否有人已经做过这样的事情 我被告知要使用Gremlin,但以前从未使用过,而且觉得它有点复杂 任何帮助都将不胜感激 谢谢我最终解决了这个问题,在返回一个唯一的列表之前,我合并了我想要返回的两个列表。因此,我可以在py

我试图在neo4j中创建一个服务器插件来进行特定的查询,并希望返回的不是一个iterable,而是节点的两个iterable

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

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

我被告知要使用Gremlin,但以前从未使用过,而且觉得它有点复杂

任何帮助都将不胜感激


谢谢

我最终解决了这个问题,在返回一个唯一的列表之前,我合并了我想要返回的两个列表。因此,我可以在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;
}
公共类Ond扩展服务器插件{
@PluginTarget(GraphDatabaseService.class)
公共静态可调基顿(
@源GraphDatabaseService graphDb,
@Description(“航空公司的节点ID”)@参数(name=“ID”)int-ID){
列表结果=新建ArrayList();
字符串n4jQuery=“START al=node(“+id+”)匹配ond-[:operatedBy]->al,ond-[:origin]->orig,ond-[:destination]->dest RETURN orig,dest;”;
ExecutionEngine=新的ExecutionEngine(graphDb);
ExecutionResult=engine.execute(n4jQuery);
List orig=new ArrayList();
List dest=new ArrayList();
//创建要返回的列表
//表行上的outter循环
用于(地图行:结果){
//两列上的内部循环:orig和dest
for(Map.Entry列:row.entrySet()){
String key=column.getKey();
Node n=(Node)column.getValue();
if(键等于(“dest”)){
目的地添加(n);
}否则{
原始添加(n);
}
}
}
//合并两个列表
结果:addAll(orig);
结果:addAll(dest);
//原始元素介于指数0和大小(结果)/2-1之间
//和dest元素介于大小(结果)/2和大小(结果)-1之间
返回结果;
}
}


希望能有帮助

你能澄清一下你到底在查询什么以及为什么需要两个iterable吗?我最终合并了我想要返回的两个数组,然后在我的代码中分别检索它们。。。。问题解决你能用一些代码发布你的答案,然后自己接受吗?为了其他有类似问题的人:)请看下面的答案:)