如何使用Neo4j APOC导出.csv,包括关系ID

时间:2017-05-26 12:53:10

标签: python csv neo4j export-to-csv neo4j-apoc

最近我一直在使用Neo4j作为我正在关注的课程的项目。 我已经想出如何使用APOC将我的数据库导出到.csv。

但是,导出的.csv文件不包含关系ID。 我使用以下调用来导出数据库:

CALL apoc.export.csv.all("export.csv",{})

我还可以使用以下Cypher查询来获取关系ID:

MATCH ()-[r]-() RETURN ID(r)

存在 apoc.export.csv.query(),但我想不出包含 apoc.export.csv.all中包含的信息的查询 call并且还包含关系ID。

我可以单独请求ID,并使用Python脚本将它们放入export.csv,但我不确定单独的调用/查询的关系顺序是否相同。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

我无法通过更改配置来查看。但是,如果您真的希望输出具有关系ID,则可以克隆apoc repo并对apoc/export/csv/CsvFormat.java进行一些更改。将关系id添加到输出是一种非常快捷的方法。

您需要将ID添加到标头中。我在下面的行中添加了, "_id:id" ...

List<String> relHeader = generateHeader(relPropTypes, config.useTypes(), "_start:id", "_end:id", "_type:label", "_id:id");

List<String> header = generateHeader(relPropTypes, config.useTypes(), "_start:id", "_end:id", "_type:label", "_id:id");

您需要更改writeRels(SubGraph graph, CSVWriter out, Reporter reporter, Map<String, Class> relPropTypes, int cols, int offset)

中的几行

我补充说......

row[offset+3]=String.valueOf(rel.getId());

并在以下行中将偏移量从3更改为4

collectProps(relPropTypes.keySet(), rel, reporter, row, 4 + offset);

它产生了一个看起来像这样的结果......

"_id","_labels","name","_start","_end","_type","_id","a_lot"
"0",":Node","A",,,,,
"1",":Node","B",,,,,
"2",":Node","C",,,,,
,,,"0","1","REL","0",""
,,,"0","2","LIKES","1","true"

我使用3.2社区进行测试。我不知道这些变化可能会对apoc.export.*集合的整体功能产生什么影响,也可能没有影响。