首页 > 解决方案 > Neo4j 为 CSV 导出指定字段和列名

问题描述

我正在将一些节点导出到 CSV,并且我想指定要导出的字段、标题中的列(字段)名称,以及将一些时间戳转换为“人类可读”的字符串。我以前使用过一个子查询并将其传递给 apoc.export.csv.query() 函数,但是当我有许多不同类型的节点时,我看不到一个简单的方法来做到这一点。理想情况下,我还想通过将主键放在由关系类型标记的列中来表达关系。举个例子:

假设我只有两种节点类型:Apples 和 Boxes。有些 Box 节点与 Apple 节点没有“:HAS”关系,有些则有多个。此查询获取我想要的值,但没有按照我需要的方式格式化它们:

MATCH (a:Apple) MATCH (b:B)-[:HAS]->(ab:Apple) 
WITH [a.pk, a.type, a.name, "", ""] AS list1, 
[b.pk, b.type, b.name, ab.pk, b.field1] AS list2 
UNWIND list1 + list2 AS item RETURN item;

物品
1314757
红色美味
富士
“”
7462518
盒子1
9686463
1472641

我希望他们如何安排是这样的:

PK 类型 姓名 有苹果 (pk) 字段1
1314757 苹果 布雷本
7462518 苹果 节日
3010653 苹果 富士
9686463 盒子 盒子1 1472641 字段值
9686463 盒子 方框2 7462518 字段值
4726110 苹果 红色美味

有没有办法只使用 cypher/apoc 以这种格式获取它们?它们不需要按字母顺序排列。

标签: csvneo4jcypherneo4j-apoc

解决方案


你会发现UNION 子句在这里很有帮助

就像是...

MATCH (a:Apple) 
RETURN a.pk AS pk, a.type AS type, a.name AS name, "" AS `HAS Apple (pk)`, "" AS field1
UNION
MATCH (b:B)-[:HAS]->(ab:Apple) 
RETURN b.pk AS pk, b.type AS type, b.name AS name, ab.pk AS `HAS Apple (pk)`, b.field1 AS field1

推荐阅读