首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在单个循环查询中添加新节点和关系

在单个循环查询中添加新节点和关系
EN

Stack Overflow用户
提问于 2014-09-30 19:54:08
回答 2查看 997关注 0票数 0

我使用的是neo4j 2.1.4社区版。我创建了一些节点和关系,如下所示。

现在我想完成以下任务:我有一个节点(紫色节点),它具有ID、Name、Created_Date和End_Date等属性。它的关系属性为flag:ACTIVE 1)我想在橙色节点下面和黄色节点上面添加一个节点,即,新创建的节点将类似于紫色节点的平行节点,橙色和黄色节点之间具有HAS关系,关系属性为Status:ACTIVE。3)现有的紫色节点关系属性Status:'ACTIVE'应该更改为INACTIVE,并且紫色节点的END_Date应该成为新创建的节点的Created_Date

这些都是我想在一个查询中获得的东西。

我写了下面的查询来实现这一点。我可以用created_date创建一个新节点,但不能删除关系。我不知道哪里出了问题。

查询:

代码语言:javascript
代码运行次数:0
运行
复制
MERGE  (og:OperatingGroup {OperatingGroup_ID:'NOP',OpeartingGroup_Name:'Operating'}) 
ON CREATE SET og.GOG_Start_Date= timestamp()
WITH og
MATCH (h:Hierarchy {Hierarchy_ID:181,Hierarchy_Name:'Global Property Hierarchy'})
Create (h)-[:HAS]->(og)
return h,og;

在上面的查询中没有实现的事情是:1)创建具有属性的关系2)更新旧节点(紫色节点)中的关系3)将旧节点的END_Date属性更新为INACTIVE

那么,如何在一个密码查询中访问所有这些内容呢?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2014-09-30 20:16:02

您应该尝试将您的单词转换为查询,或者首先将其绘制在纸上或白板上。

首先,你想“匹配”一个节点,那么为什么要从"MERGE“开始呢?

代码语言:javascript
代码运行次数:0
运行
复制
MATCH (purple:Purple {id:123})
WITH purple

其次,您可能想要获取连接到Purple Node的橙色节点和黄色节点,因为您的新节点应该类似于平行的节点,所以您还应该为关系指定一个别名,因为您希望稍后修改关系属性:

代码语言:javascript
代码运行次数:0
运行
复制
MATCH (orange:Orange)-[purpleToOrange:HAS]-(purple)-[purpleToYellow:HAS]-(yellow:Yellow)
WITH purple, orange, yellow, purpleToOrange, purpleToYellow

然后,您需要创建新节点并将黄色和橙色节点附加到该节点,相关节点已经绑定到查询,因此您可以使用"MERGE“并避免重复的黄色和橙色节点:

代码语言:javascript
代码运行次数:0
运行
复制
MERGE (orange)-[:HAS]->(newPurple:Purple {id: 789654, created_at:20140930140925})<-[:HAS]-(yellow)

最后,您希望将关系属性status和end_date从原来的紫色节点更新为??(在你的描述中没有指定,所以我假设在紫色和橙色之间)

代码语言:javascript
代码运行次数:0
运行
复制
SET purpleToOrange.status = "INACTIVE",
SET purpleToOrange.endDate = 20140930140925

然后,您可能想要返回新创建的紫色节点:

代码语言:javascript
代码运行次数:0
运行
复制
RETURN newPurple

现在,完整的查询如下:

代码语言:javascript
代码运行次数:0
运行
复制
MATCH (purple:Purple {id:123})
WITH n
MATCH (orange:Orange)-[purpleToOrange:HAS]-(purple)-[purpleToYellow:HAS]-(yellow:Yellow)
WITH purple, orange, yellow, purpleToOrange, purpleToYellow
MERGE (orange)-[:HAS]->(newPurple:Purple {id: 789654, created_at:20140930140925})<-[:HAS]-(yellow)
SET purpleToOrange.status = "INACTIVE",
SET purpleToOrange.endDate = 20140930140925
RETURN newPurple
票数 0
EN

Stack Overflow用户

发布于 2014-09-30 20:22:43

您想要用一个查询做很多事情,但我认为这样就可以了:

代码语言:javascript
代码运行次数:0
运行
复制
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

匹配从中踢出所有内容的层次结构节点。

代码语言:javascript
代码运行次数:0
运行
复制
MATCH (h:Hierarchy {Hierarchy_ID:181,Hierarchy_Name:'Global Property Hierarchy'})

将此与活动状态关系合并到ID为'NOP‘的OperatingGroup。

代码语言:javascript
代码运行次数:0
运行
复制
MERGE (h)-[:HAS{status;'ACTIVE'}]->(og:OperatingGroup {OperatingGroup_ID:'NOP',OpeartingGroup_Name:'Operating'})

如果组是刚创建的,则设置开始日期。

代码语言:javascript
代码运行次数:0
运行
复制
ON CREATE SET og.GOG_Start_Date = timestamp()

现在匹配任何其他已存在的OperatingGroups和它们的HAS关系。设置status属性和endDate (在OperatingGroup节点上,以匹配GOG_Start_Date?)如你所愿。

代码语言:javascript
代码运行次数:0
运行
复制
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

我从Christophe的回答中看到,他保留了OperatingGroup到OperatingCOmpany的关系,虽然没有被请求,但确实很有意义(我们是在颠倒地操作您的图形吗?)

代码语言:javascript
代码运行次数:0
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26120196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档