首页 文章

在cypher中查询foreach以合并类似的节点

提问于
浏览
1

我试图找出如何运行我的数据库,收集相似的节点,然后将它们合并到一个节点,并将以前的关系重定向到新创建的节点 . 我基本上创建了一堆节点,其中部分或全部属性都有信息,如下所示:

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 回答

  • 0

    我终于想出了如何做到这一点:

    MATCH (car:Car{Make:'Ford', Model:'Aerostar'})<-[d:drives]-(person:Person{Name:'me'})
    WITH car,d
    SKIP 1
    DELETE car,d
    
  • 1

    [EDITED]

    这对你有用吗?

    MATCH (car:Car{Make:'Ford', Model:'Aerostar'})<-[d:drives]-(person:Person{Name:'me'})
    DELETE d, car
    WITH person
    CREATE (car:Car{Make:'Ford', Model:'Aerostar', Color:'Blue', Transmission:'Auto'})<-[d:drives]-(person);
    

相关问题