我有一个给定的 CSV 文件:
1,2016-10-09T21:14:44Z,Anna Long,"[{"_id": "1", "objectType": "primaryTag"}]"
2,2016-10-10T14:03:51Z,Jonathan Collier,"[{"_id": "2", "objectType": "primaryTag"}, {"_id": "3", "objectType": "secondaryTag"}]"
3,2016-10-09T21:42:35Z,Michelle Wheeler,"[{"_id": "4", "objectType": "primaryTag"}, {"_id": "5", "objectType": "secondaryTag"}, {"_id": "6", "objectType": "secondaryTag"}]"
现在我尝试从 CSV 文件中的 JSON 数组创建节点和关系。我可以使用以下命令导入 CSV 文件:
LOAD CSV FROM file:///<my_file> AS row
此外,我可以使用以下查询获取 JSON 数组:
WITH apoc.convert.fromJsonList(row[3]) AS tags
现在我想分别为 CSV 文件中的每一行创建 JSON 数组中的每个标记之间的关系。
举个例子,让我们从 CSV 文件中取出第三行。我们在 JSON 数组中有 3 个对象,因此我想创建 3 个关系。id 为 4&5、4&6 和 5&6 的标签之间的关系。
可悲的是,我完全被困在这里,不确定是否必须使用UNWIND或FOREACH。
编辑
我解决了以下问题(所有相关节点都已导入数据库中):
LOAD CSV FROM file:///<my_file> AS row
MATCH (q:Question {id: row[0]})--(t1:Tag)
WITH COLLECT(t1) AS tags, row[0] AS question_id
FOREACH (i IN range(0, size(tags) - 2) |
FOREACH (node1 IN [tags[i]] |
FOREACH (j IN range(i+1, size(tags) - 1) |
FOREACH (node2 IN [tags[j]] |
MERGE (node1)-[c:CONNECTED_TO]-(node2)
)
)
)
)
该代码有效,但它有 4 个 FOREACH 循环。我仍然相信有一个更漂亮的方法。所以请随意回答我的问题。