首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >neo4j合并、设置、案例

neo4j合并、设置、案例
EN

Stack Overflow用户
提问于 2016-09-24 06:18:24
回答 2查看 2.8K关注 0票数 1

我想做一个棘手的查询。我需要检查一段关系是否存在;

  • 如果是这样的话,我需要将这个关系上的属性(支柱)设置为max(0,支柱+ val)。
  • 如果没有,我需要创建它,将属性设置为max(0,value)。

财产可能会变成负数。

本质上,这就是我想要的,尽管这种格式无法工作,因为合并后不能有WITH语句:

代码语言:javascript
复制
MATCH (n1:Type1 {id:{id1}), (n2:Type2 {id: {id2}) 
MERGE (n1)-[r:RELATIONSHIP]->(n2) WITH CASE 
WHEN r.prop + {val} < 0 THEN 0 
ELSE r.prop + {val} END as prop 
ON CREATE SET r.prop = prop
ON MATCH SET r.prop = prop

这是它的两部分,尽管我不想查询两次:

代码语言:javascript
复制
MATCH (n1:Type1 {id:{id1}), (n2:Type2 {id: {id2}) 
MERGE (n1)-[r:RELATIONSHIP]->(n2)
ON CREATE SET r.prop = 0

MATCH (n1:Type1 {id:{id1})-[r:RELATIONSHIP]->n2:Type2 {id: {id2})
WITH r, CASE 
WHEN r.prop + {val} < 0 THEN 0 
ELSE r.prop + {val} END as prop
SET r.prop = prop
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-09 18:02:18

代码语言:javascript
复制
MATCH (n1:Type1 {id:{id1}), (n2:Type2 {id: {id2}) 
MERGE (n1)-[r:RELATIONSHIP]->(n2)
ON CREATE SET r.prop = 
CASE
    WHEN {val} < 0 THEN 0
    ELSE {val}
    END
ON MATCH SET r.prop = 
CASE 
   WHEN r.prop + {val} < 0 
   THEN 0 
   ELSE r.prop + {val} 
   END
票数 0
EN

Stack Overflow用户

发布于 2016-09-24 10:19:48

我认为这个查询应该能做到这一点:

代码语言:javascript
复制
MATCH (n1:Type1 {id:{id1}), (n2:Type2 {id: {id2}) 
MERGE (n1)-[r:RELATIONSHIP]->(n2)
ON CREATE SET r.prop = 0
ON MATCH SET r.prop = 
CASE r.prop 
   WHEN r.prop + {val} < 0 
   THEN 0 
   ELSE r.prop + {val} 
   END
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39673199

复制
相关文章

相似问题

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