你想要做了很多与一个单一的查询,但我认为这将做到这一点:
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