我有一組標籤類型的節點。其中一些與其他類型節點有關係,其中一些沒有。我想遍歷所有類型的節點,並做一些動作基礎上的關係(無論是空或有一個現有的關係)試圖做一個嵌套的FOREACH列表中的匹配
在僞代碼,這就是我想做的事:
For each type1 in allTypes
For each type2 in allTypes
Match relationship between type1 and type2
If relationship between type1 and type2 exists
do something
else
do other thing
但我不知道如何在Cypher中做到這一點。我知道你不能做暗號foreach語句裏面的匹配,所以我用UNWIND嘗試這樣的:
MATCH (Types:Type)
WITH COLLECT(Types) AS types
UNWIND types as type1
UNWIND types as type2
MATCH (type1)-[r]->(type2)
RETURN type1.name,type(r), type2.name
也能正常工作爲已經存在的所有關係,但是當有type1和type2之間沒有關係,我在返回結果中沒有得到任何東西。
你想,如果關係不存在做的? –
你打算在每種情況下做什麼替代「事情」?他們是否在變異(即他們是否改變了圖表),還是需要進行額外的查詢,或者只是從路徑返回屬性? –
我認爲你可能想放棄循環的想法,這是更強制性的方法,即使你設法做到這一點,效率也會很低。你的僞代碼使用雙重for循環,這將轉化爲ñ2複雜的笛卡爾產品。通過在所有類型上匹配一次:類型,找出與其他類型存在什麼關係:類型(或者如果沒有這種關係存在),你應該有一個O(n)操作。 – InverseFalcon