你想要做了很多與一個單一的查詢,但我認爲這將做到這一點:
MATCH (h:Hierarchy {Hierarchy_ID:181,Hierarchy_Name:'Global Property Hierarchy'})
MERGE (h)-[:HAS{status;'ACTIVE'}]->(og:OperatingGroup {OperatingGroup_ID:'NOP',OpeartingGroup_Name:'Operating'})
ON CREATE SET og.GOG_Start_Date = timestamp()
WITH h, og
MATCH (h)-[has:HAS{status:'ACTIVE'}]->(other:OperatingGroup)
WHERE other <> og
SET has.status='INACTIVE'
SET other.GOG_End_Date = og.GOG_Start_Date
RETURN h, og
與Hierarchy節點相匹配,即所有內容都已啓動。
MATCH (h:Hierarchy {Hierarchy_ID:181,Hierarchy_Name:'Global Property Hierarchy'})
將此狀態與活動狀態關係合併到ID爲'NOP'的OperatingGroup。
MERGE (h)-[:HAS{status;'ACTIVE'}]->(og:OperatingGroup {OperatingGroup_ID:'NOP',OpeartingGroup_Name:'Operating'})
如果該組剛剛創建,則設置開始日期。
ON CREATE SET og.GOG_Start_Date = timestamp()
現在匹配存在的任何其他OperatingGroups及其HAS關係。按要求設置status屬性和endDate(在OperatingGroup節點上,以匹配GOG_Start_Date?)。
WITH h, og
MATCH (h)-[has:HAS]->(other:OperatingGroup)
WHERE other <> og
SET has.status='INACTIVE'
SET other.GOG_End_Date = og.GOG_Start_Date
RETURN h, og
編輯 - OperatingCompany
我從克里斯托弗的回答,他保留OperatingGroup到OperatingCOmpany關係,這雖然不要求確實讓很多的意義看(就是我們操作上的圖形倒掛?)。
MATCH (h:Hierarchy {Hierarchy_ID:181,Hierarchy_Name:'Global Property Hierarchy'})-[existingHas:HAS]->(existingOg:OperatingGroup)<-[belong:BELONGS]-(company:OperatingCompany)
MERGE (h)-[:HAS{status;'ACTIVE'}]->(og:OperatingGroup {OperatingGroup_ID:'NOP',OpeartingGroup_Name:'Operating'})<-[:BELONGS]-(company)
ON CREATE SET og.GOG_Start_Date = timestamp()
WITH h, og, existingHas, exitingOg
SET existingHas.status='INACTIVE'
SET existingOg.GOG_End_Date = og.GOG_Start_Date
RETURN h, og
@ Christophe,在查詢我寫了MERGE爲了創建一個新的節點。在上圖中,我沒有顯示新創建的節點。我想要在第二級創建該節點。所以我想創建具有屬性的節點。然後想要與一級和三級節點建立關係。這裏橙色是1級,紫色級2,黃色級3,綠色級4。所以在創建新節點後,我將在2級中擁有2個prple節點。 – shree11 2014-10-01 04:49:45
那麼我的查詢在第二個級別中創建了新的紫色節點,在橙色和黃色之間,我首先開始匹配原始紫色節點,原因有兩個, 1.你在圖中定義了一個明確的起點,所以沒有全局圖遍歷導致更快的查詢,2.你可以訪問與紫色節點相關的橙色和黃色節點,所以你事先知道你的位置新節點應該連接。 – 2014-10-01 06:20:10