我如何告訴密碼人不遵循某種關係/邊緣?遵循所有關係,但具體的關係
E.g.我有一個:NODE
,它通過:BUDDY
關係連接到另一個:NODE
。此外,每個:NODE
都與任意深度的:STUFF
有關,其邊界爲,而不是,其類型爲:BUDDY
。我現在想要添加從:NODE
到:STUFF
的快捷關係。但是,我不包括其:BUDDIES
的:STUFF
。
(:NODE)-[:BUDDY]->(:NODE)
(:NODE)-[*]->(:STUFF)
我當前的查詢看起來是這樣的:
MATCH (n:Node)-[*]->(s:STUFF) WHERE NOT (n)-[:BUDDY]->()-[*]->(s) CREATE (n)-[:HAS]->(s)
但是我有這個查詢的一些問題:
1)如果我添加不直接:NODE
但孩子們之間的:BUDDY
關係:NODE
查詢將使用該關係進行匹配。這可能不是有意的,因爲我根本不想包括好友。
2)解釋告訴我,neo4j做匹配(:NODE)-[*]->(:STUFF)
,然後AntiSemiApply
模式(n)-[:BUDDY]->()
。因此它匹配整個圖表,然後匹配大多數找到的連接。這似乎是無效的,查詢運行速度比我喜歡(但主觀這聽起來可能)。
一個(壞)修正是通過(:NODE)-[*..XX]->(:STUFF)
來限制(:NODE)-[*]->(:STUFF)
的深度。不過,除非我在最壞的情況下使用了一個荒謬的高數字,否則我無法保證這個深度。
我實際上只是想告訴neo4j只是不遵循某種關係。例如。 MATCH (n:NODE)-[ALLBUT(:BUDDY)*]->(s:STUFF) CREATE (n)-[:HAS]->(s)
。我怎樣才能實現這一點,而不必枚舉所有允許的連接,並將它們連接到|
(這真的很快 - 但我必須手動跟蹤所有可能的關係)?
如果我不在圖中更深的地方添加':BUDDY'關係,解決方案就很好。我會看看apoc。 – Sim