我以csv格式关联了ID。
例如:
ID, Associated_ID
1,2
3,4
8,1
2,100
100,100
8,101
200,200
我想获取所有关联的ID。
在这种情况下,预期结果是:
[1,2,8,100,101]
[3,4]
[200]
load csv from 'file:///test/test.data' AS line
CREATE (:ids { mc: line[0], associated_mc:line[1]})
MERGE (m1:id {name: line[0]})
MERGE (m2:id {name: line[1]})
MERGE (m1)-[:SAME]->(m2);
MATCH p=(a)-[r:SAME*]-(b) RETURN p;
答案 0 :(得分:0)
您正在创建一个数据库,并在单个查询中对其进行检索。 您应该分别运行这两个查询。
在创建节点时,您无需编写CREATE,MERGE会这样做,避免重复。因此,您可以通过以下查询加载数据:
LOAD CSV FROM 'file:///test/test.data' AS line
MERGE (m1:id {name: toInt(line[0])})
MERGE (m2:id {name: toInt(line[1])})
MERGE (m1)-[:SAME]->(m2);
并通过以下查询获取所需结果:
MATCH p=(start:id)-[:SAME*]->(end:id)
WHERE
NOT EXISTS ((end)-[:SAME]->())
AND
NOT EXISTS ((start)<-[:SAME]-())
return EXTRACT(node IN nodes(p) | node.name)
如果您不把条件放在任何地方,您将获得太多的路径 其他较长路径的一部分。您可以通过删除
来验证结果WHERE
条件
答案 1 :(得分:0)
这对我有用-
MATCH (m:id)
CALL apoc.path.subgraphAll(m, {relationshipFilter:'SAME'}) YIELD nodes
with EXTRACT(node IN nodes | node.name) as ex_nodes
return distinct apoc.coll.sort(ex_nodes);