从neo4j中的服务器插件返回JSONObject
我试图在neo4j中创建一个服务器插件来进行特定的查询,并希望返回的不是一个iterable,而是节点的两个iterable 根据neo4j文档,我发现这是不可能的,所以我尝试从这些数组中创建一个JSONObject数组,然后将其作为服务器插件结果返回。但这似乎不起作用 所以我在问是否有人已经做过这样的事情 我被告知要使用Gremlin,但以前从未使用过,而且觉得它有点复杂 任何帮助都将不胜感激从neo4j中的服务器插件返回JSONObject,neo4j,cypher,gremlin,Neo4j,Cypher,Gremlin,我试图在neo4j中创建一个服务器插件来进行特定的查询,并希望返回的不是一个iterable,而是节点的两个iterable 根据neo4j文档,我发现这是不可能的,所以我尝试从这些数组中创建一个JSONObject数组,然后将其作为服务器插件结果返回。但这似乎不起作用 所以我在问是否有人已经做过这样的事情 我被告知要使用Gremlin,但以前从未使用过,而且觉得它有点复杂 任何帮助都将不胜感激 谢谢我最终解决了这个问题,在返回一个唯一的列表之前,我合并了我想要返回的两个列表。因此,我可以在py
谢谢我最终解决了这个问题,在返回一个唯一的列表之前,我合并了我想要返回的两个列表。因此,我可以在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吗?我最终合并了我想要返回的两个数组,然后在我的代码中分别检索它们。。。。问题解决你能用一些代码发布你的答案,然后自己接受吗?为了其他有类似问题的人:)请看下面的答案:)