【发布时间】:2016-09-20 12:45:22
【问题描述】:
我有一个包含 700K 属性的大型数据库。但是有些是重复的,所以我现在想“清理”所有这些东西......
我期待将 1+ 个节点替换为 1+ 个其他节点,并链接该节点可能存在的所有关系。
所以我想做类似的事情:
MATCH (p:Property) WHERE p.uid IN ['A6271DFB-F0FD-0DF1-6F22-67F7D3164AE6']
WITH p AS sources
MATCH (p2:Property) WHERE p2.uid IN ['51A26A14-74FB-BCFC-FE5C-661A43A9377C','8DCD063C-965D-CC12-6159-E287CD000954']
WITH sources, p2 AS destinations
OPTIONAL MATCH (sources)-[k]->(n) MERGE (destinations)-[y]->(n) SET y=k
WITH sources, destinations
OPTIONAL MATCH (sources)<-[s]-(n) MERGE (destinations)<-[w]-(n) SET w=s
WITH sources
DETACH DELETE sources
当然,它不起作用,因为我需要为合并指定关系类型......但我实际上不知道它(因为它可能是多种类型并且取决于类型,rel 可能具有属性)...
所以现在,我开发了一个 PHP 脚本来匹配所有节点+rels;和 FOREACH 记录;生成一个 MERGE 查询以将它们链接到新节点......但这很慢而且没有优化......
有人知道吗?
【问题讨论】:
-
看看
apoc(Neo4j 3.0 的真棒程序 - 代号“apoc”) - neo4j-contrib.github.io/neo4j-apoc-procedures/…