2017-09-05 141 views
3

我正在一個查詢中創建多個關係。如果找不到第一個關係的匹配,則不創建第二個關係。如果兩個匹配都存在,那麼這兩個關係都有效Neo4j:創建多個關係不起作用

實施例:

假定 'MATCH1ID' 下面不存在,但 'MATCH2ID' 一樣。爲什麼會發生?

不起作用

MERGE (NewRecord:OBJECTNAME { Id: 'ABZDEFG' }) 
SET NewRecord.name='NEWNAME' 
WITH NewRecord 
MATCH (a) 
WHERE a.Id = 'MATCH1ID' 
CREATE (a)-[ar:Relationship1]->(NewRecord) 
WITH NewRecord MATCH (b) 
WHERE b.Id = 'MATCH2ID' 
CREATE (b)-[br:Relationship2]->(NewRecord) 

(如果我切換確實存在是先在它工作的順序節點的順序)

WORKS

MERGE (NewRecord:OBJECTNAME { Id: 'ABZDEFG' }) 
SET NewRecord.name='NEWNAME' 
WITH NewRecord 
MATCH (b) 
WHERE b.Id = 'MATCH2ID' 
CREATE (b)-[br:Relationship2]->(NewRecord) 
WITH NewRecord 
MATCH (a) 
WHERE a.Id = 'MATCH1ID' 
CREATE (a)-[ar:Relationship1]->(NewRecord) 

回答

1

您可以嘗試使用OPTIONAL MATCH而不是一個簡單的MATCH

MERGE (NewRecord:OBJECTNAME { Id: 'ABZDEFG' }) 
SET NewRecord.name='NEWNAME' 
WITH NewRecord 
OPTIONAL MATCH (a) 
WHERE a.Id = 'MATCH1ID' 

FOREACH(x IN (CASE WHEN a IS NULL THEN [] ELSE [1] END) | 
    CREATE (a)-[ar:Relationship1]->(NewRecord) 
) 

WITH NewRecord 
OPTIONAL MATCH (b) 
WHERE b.Id = 'MATCH2ID' 

FOREACH(x IN (CASE WHEN b IS NULL THEN [] ELSE [1] END) | 
    CREATE (b)-[br:Relationship2]->(NewRecord) 
) 

此外,該查詢使用技巧與FORACHCASE WHEN處理條件。在這種情況下,CREATE語句僅在ab變量不爲空時執行。

請參閱Neo4j: LOAD CSV - Handling Conditionals