我试图找出如何运行我的数据库,收集相似的节点,然后将它们合并到一个节点,并将以前的关系重定向到新创建的节点 . 我基本上创建了一堆节点,其中部分或全部属性都有信息,如下所示:
MERGE (company:Company{Name: 'Ford'})
MERGE (person:Person{Name: 'me'})
MERGE (car:Car{Make:'Ford', Model:'Aerostar', Color:'Blue', Transmission:'Auto'})
但我意外地复制了应该合并的节点,而是创建了新的节点:
MERGE (car:Car{Make:'Ford', Model:'Aerostar', Color:'', Transmission:''})
MERGE (car:Car{Make:'Ford', Model:'Aerostar', Color:'Blue', Transmission:''})
MERGE (car:Car{Make:'Ford', Model:'Aerostar', Color:'Blue', Transmission:'Auto'})
MERGE (person)-[:drives]->(car)-[:parent_company]->(company)
所以,我想做的是拿出我意外创建的三个 (car)
节点,合并所有属性,删除额外节点创建的额外关系并更正路径,所以 (me)
只有一个 [:drives]
关系连接到一个 (car)
通过单一的 [:parent_company]
关系连接 .
这是我尝试过的,但不能完全弄明白:
MATCH p=(car:Car{Make:'Ford', Model:'Aerostar'})<-[:drives]-(person:Person{Name:'me'})
FOREACH (car in nodes (p) | SET Car.Color: 'Blue', Car.Transmission:'Auto')
/////This is where I'm stuck
EDIT: Another Attempt(I get "r already declared error):
START n = node(3) //node id for complete 'aerostar' node
WITH n
MATCH (company)<-[:parent_company]-(car:Car{Make:'Ford', Model:'Aerostar')<-[r:drives]-(person)
WITH n, company, r, car, person
MERGE (person)-[r]->(n)-[:parent_company]->(company)
DELETE car
2 回答
我终于想出了如何做到这一点:
[EDITED]
这对你有用吗?