如何解决使用APOC.export时是否可能不输出关系列?
MATCH (m:computer)
WITH collect(DISTINCT m) AS M
CALL apoc.export.csv.data( M,[],null,{stream:true,batchSize:100}) YIELD data as mdata
对于这样的查询,即使仅针对导出节点,也没有关系,它仍会给出以下字段,其中包含所有空值:
_start
_end
_type
在此过程中很难过滤掉它们。有参数可以控制吗?
添加项:
MATCH (m:SportsTeam)-[r:hasMember]-(n)
WITH collect(DISTINCT m) AS M,collect(DISTINCT n) AS N,collect(r) as R
CALL apoc.export.csv.data( M,{stream:true}) YIELD data
WITH apoc.text.replace(data,'(?:,"_start","_end","_type"|,)(?=\n)','') AS mdata
CALL apoc.export.csv.data( N,{stream:true}) YIELD data as ndata
WITH apoc.text.replace(data,'') AS ndata
CALL apoc.export.csv.data( [],R,{stream:true}) YIELD data as rdata
RETURN mdata,ndata,rdata
我在这里所做的是将节点M,节点N和关系R输出到3个不同的文件中。添加2个替换函数以摆脱最后3列后,它报告此错误:
neobolt.exceptions.CypherSyntaxError: Variable `N` not defined (line 5,column 28 (offset: 282))
"CALL apoc.export.csv.data( N,{stream:true}) YIELD data as ndata"
不能像这样连续使用CALL和WITH吗?
解决方法
您可以使用APOC函数apoc.text.replace修改CSV字符串以删除不需要的行:
MATCH (c:computer)
WITH COLLECT(DISTINCT c) AS cs
CALL apoc.export.csv.data(cs,[],null,{stream:true,batchSize:100}) YIELD data
WITH apoc.text.replace(data,'(?:,"_start","_end","_type"|,)(?=\n)',"") AS newData
... // use newData,which does not have the last 3 columns
由于不需要的3列位于每行的末尾,因此正则表达式(?:,)(?=\n)
与每行末尾(标题行或数据行)的不需要的文本匹配。 / p>
[更新]
关于ADDITIONS
问题:WITH子句将删除该子句未指定的所有变量,因此N
不会被结转。另外,您还有其他问题。这应该解决所有问题:
MATCH (m:SportsTeam)-[r:hasMember]-(n)
WITH COLLECT(DISTINCT m) AS M,COLLECT(DISTINCT n) AS N,COLLECT(r) as R
CALL apoc.export.csv.data( M,{stream:true}) YIELD data
WITH apoc.text.replace(data,'') AS mdata,N,R
CALL apoc.export.csv.data( N,'') AS ndata,mdata,R
CALL apoc.export.csv.data( [],R,{stream:true}) YIELD data AS rdata
RETURN mdata,ndata,rdata
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。