2016-09-24 62 views
0

我想要做一個棘手的查詢。 我需要檢查是否存在關係;neo4j MERGE,SET,CASE

  • 如果確實我需要在這個關係到最大(0,道具+ VAL)
  • 如果沒有我需要創建屬性設置爲最大值(0設置屬性(丙)值)

該屬性可以爲負數。

這裏的基本上就是我要去的,但這種格式將不是在合併後,因爲你不能有一個工作,聲明:

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 

這是它會如何看待這兩個部分,但我想沒有查詢兩次:

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 

回答

0
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

我覺得這個查詢應該做的伎倆:

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 
+0

對不起,但這不起作用。當r.prop + {val} <0並且它需要在CREATE上將r.prop設置爲{val}或0時,它並沒有引起注意 – v4gil