2017-03-19 35 views
1

パターンで指定された特定の関係がまだ存在しない場合にのみノード間の関係を作成するにはどうすればよいですか?既存の関係のNeo4jワイルドカード検索?

私が得ることができる最も近いです:

MATCH (d1:Document),(d2:Document), (d1)-[r]-() 
WHERE d1.acct = d2.acct 
AND d1.doc_type = 'ID' AND d2.doc_type = 'PA' 
AND d1.DD_sd = d2.DD_sd 
AND NOT TYPE (r) =~ ':IDRelated*.' 
CREATE (d1) -[:IDRelated_SameDD]-> (d2) 

それは除外するように特定の関係をリストするほど正確ではないであろう。私は正規表現を使用する(またはで始まる)そのパターンに一致する複数の関係を除外するパターンを指定することができます

MATCH (d1:Document),(d2:Document) 
WHERE d1.acct = d2.acct 
AND d1.doc_type = 'ID' AND d2.doc_type = 'PA' 
AND d1.DD_sd = d2.DD_sd 
AND NOT ((d1) -[':IDRelated*.']-()) 
CREATE (d1) -[:IDRelated_SameDD]-> (d2) 

私のような何かをしたいと思います。

ありがとうございます!

答えて

3

現時点では、このインラインでパターンを実行する方法はありません。

ただし、正しいd1一致のフィルタリングが終了するまで、照会をPROFILEしてd2に保存するクエリと比較することができます。このようなもの:

MATCH (d1:Document)-[r]-() 
WHERE d1.doc_type = 'ID' 
WITH d1, COLLECT(r) as rels 
WHERE NONE(r in rels WHERE type(r) STARTS WITH 'IDRelated') 
MATCH (d2:Document) 
WHERE d1.acct = d2.acct 
AND d1.DD_sd = d2.DD_sd 
AND d2.doc_type = 'PA' 
CREATE (d1) -[:IDRelated_SameDD]-> (d2) 
+1

またはむしろ 'type(r)STARTS WITH IDRelated' –

+0

おっと、そうですよ! – InverseFalcon

関連する問題