2

我有具有以下属性的节点

(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
}
4

2 回答 2

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)
于 2017-08-25T06:15:31.707 回答
1

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

... here you match for n and m ...
WITH n.valUpper as x1, n.valLower as y1, m.valUpper as x2, m.valLower as y2
RETURN apoc.coll.max([x2, y2]) - apoc.coll.min([x1, y1]) < (x2 - x1) + (y2 - y1)

希望这可以帮助。

问候,汤姆

于 2017-08-25T04:06:33.103 回答