查找2个数字范围重叠的节点

时间:2017-08-25 02:43:17

标签: neo4j cypher cypher-3.1

我的节点具有以下属性

(n:User {valUpper:100, valLower:-100}) 
(m:User {valUpper:200, valLower: 0})

使用cypher可以找到(m)的范围是否与(n)重叠?

这就是我在js中所做的。

if max(x2, y2) - min(x1, y1) < (x2 - x1) + (y2 - y1) {
     //Ranges Overlap
}

2 个答案:

答案 0 :(得分:2)

Apoc非常值得选择。只想为那些不想启用apoc的人提及非apoc方式。

WITH n.valUpper as x1, n.valLower as y1, m.valUpper as x2, m.valLower as y2
RETURN 
  CASE WHEN x2 > y2 THEN x2 ELSE y2 END - 
  CASE WHEN x1 < y1 THEN x1 ELSE y1 END 
  < (x2 - x1) + (y2 - y1)

答案 1 :(得分:1)

使用javascript示例中的公式,你可以这样做

get '/*id', to: 'posts#show', as: :post, constraints: { id: /\d{4}\/\d{2}\/\d{2}\/\w.+/ }
get '/*id', to: 'pages#show', as: :page

希望这有帮助。

此致 汤姆