【发布时间】:2019-08-20 14:30:26
【问题描述】:
我正在尝试在不使用两个匹配子句的情况下从二级查询中导出边缘列表。
我已经编写了一个查询来创建我需要的输出,但它需要两次搜索图表并从 csv 中读取我的匹配条件两次。
这是我当前的工作查询:
CALL apoc.export.csv.query('LOAD CSV WITH HEADERS FROM \'file:///degree0.csv\' as pg_pap
MATCH (n:paper{paper_id:pg_pap.`paper_id`})<-[:REFERENCES]-(m:paper)
RETURN n.paper_id AS From , m.paper_id AS To
UNION ALL
LOAD CSV WITH HEADERS FROM \'file:///degree0.csv\' as pg_pap
MATCH (n:paper{paper_id:pg_pap.`paper_id`})<-[:REFERENCES]-(m:paper)<-[:REFERENCES]-(o:paper)
RETURN m.paper_id AS From, o.paper_id AS To
', 'edge.csv', {})
;
这是我想要的行为,但显然有两个 MATCH 子句和两个 LOAD CSV 语句,性能不是很好。我试着用这样的路径匹配写一些东西:
CALL apoc.export.csv.query('LOAD CSV WITH HEADERS FROM \'file:///degree0.csv\' as pg_pap
MATCH p=(n:paper{paper_id:pg_pap.`paper_id`})<-[:REFERENCES]-(m:paper)<-[:REFERENCES]-(o:paper)
UNWIND (nodes(p)) as nodes
RETURN nodes.paper_id', 'edge.csv', {})
;
但这只是返回一列 ID 而不会生成边缘列表。
有没有一种方法可以使用单个 LOAD CSV 和单个 MATCH 子句编写查询,并且仍然返回网络的统一边缘列表?
【问题讨论】: