2015-04-27 32 views
0

我想編寫一個測試存在路徑的單個Cypher語句,如果該部分不存在,則添加它。Cypher - 如果節點不存在,則進行原子插入

考慮路徑(:A)-[:REL]->(:B{id:123}),那麼路徑的存在可以通過

OPTIONAL MATCH p = (:A)-[:REL]->(:B{id:123}) RETURN CASE COUNT(p) WHEN 0 THEN false ELSE true END

哪個返回false測試,如果路徑不存在,或真如果這樣做。

的路徑可以通過

CREATE (b:B{id:123}), (b)<-[:REL]-(:A)

然而創建,如果這些語句被組合,這樣,如果該路徑丟失然後它被創建,Cypher支架生成語法錯誤

OPTIONAL MATCH p = (:A)-[:REL]->(:B{id:123}) RETURN CASE COUNT(p) WHEN 0 THEN CREATE (b:B{id:123}), (b)<-[:REL]-(:A) END

有沒有正確的方法來執行此路徑的原子創建?

回答

1

您實際上可以使用MERGE語句,而不是試圖詢問節點是否在第一位。

此語句將創建節點和關係(如果它尚不存在,並且不會在已經存在的情況下創建它)。

MERGE (b:B {id:123})<-[:REL]-(:A) 
return * 
+0

謝謝 - 閱讀說明書! [merge](http://neo4j.com/docs/stable/query-merge.html) – Geoff

+0

一旦有人知道要搜索的魔語,RTM很容易... –

相關問題