我正在尝试查询所有可能的路径,这些路径对应于“(订单) - [订单] - >(产品) - [PART_OF] - >(类别)”并希望获取整个路径(即所有3个节点和2个关系作为其适当的类)。
我在下面使用的方法只让我有1列数据(订单数量:2155)。如果我再次尝试它(第二次循环),我得到的行数是0(产品数量:0)。有没有办法将所有结果保存为节点和关系,还是我必须查询命令5次? 请帮忙!
String query = "MATCH (o:Order)-[:ORDERS]->(p:Product)-[:PART_OF]->(cate:Category) return o,p,cate";
try( Transaction tx = db.beginTx();
Result result = db.execute(query) ){
Iterator<Node> o_column = result.columnAs( "o" );
int i = 0;
for ( Node node : Iterators.asIterable( o_column ) )
{
i++;
}
System.out.println("number of orders: " + i);
i = 0;
Iterator<Node> p_column = result.columnAs( "p" );
for ( Node node : Iterators.asIterable( p_column ) )
{
i++;
}
System.out.println("number of products: " + i);
tx.success();
}
答案 0 :(得分:1)
如果你这样做:
MATCH path=(o:Order)-[:ORDERS]->(p:Product)-[:PART_OF]->(cate:Category) return path
您可以在循环中处理路径并解压缩。需要进行一些探索,但所有信息都在那里。
希望有所帮助。
此致 汤姆
答案 1 :(得分:0)
我在下面的代码中找到了解决此问题的方法,我使用id()
将返回值更改为节点ID,然后使用GraphDatabaseService.getNodeByID(long)
:
String query = "MATCH (o:Order)-[:ORDERS]->(p:Product)-[:PART_OF]->(cate:Category) return id(o), id(p), id(cate)";
int nodeID = Integer.parseInt(column.getValue().toString());
Node node = db.getNodeById(nodeID);