【发布时间】:2021-10-10 14:16:12
【问题描述】:
我的图表有节点“T”,可以分配一个或多个节点“TV”。这些节点“TV”的不同之处在于参数“version”可以是一个从 0 开始向上计数的整数,它们还有另一个称为“flag”的参数。
我想找到具有“flag = 2”的相应节点“TV”的所有节点“T”。如果有一个“flag = 2”,我想要这个节点“TV”,即使其他相关节点“TV”中的“version”参数比“flag = 2”的节点更高。如果没有“flag = 2”,我希望节点“TV”具有所有现有“TV”节点的最高(最新)“版本”到该节点“T”。
我尝试了几个想法并希望用“max”来捕捉它,但没有成功:
MATCH (tv:TV) -- (t:T)
WITH max(tv.version) as max
MATCH (tv:TV) -- (t:T) WHERE tv.version = max OR tv.flag = 2
RETURN t, tv
关于如何设计查询的任何提示? 谢谢
******* 添加 ******* 对于何塞·巴科伊:
为了更好地理解语句,我已经重写并重命名了节点:
match (t:Transaction)--(v:transactionVersion)
WHERE t.uuid ="61263a4d3c7cb"
WITH max(v.versionNumber) as max
match (t:Transaction)--(v:transactionVersion)
WHERE t.uuid ="61263a4d3c7cb"
RETURN
CASE
WHEN v.versionFlag = 2 THEN v.uuid
WHEN v.versionNumber = max THEN v.uuid
END AS versionUUID
结果是我变成了两个节点,一个可能具有 versionFlag = 2,另一个具有最大 versionNumber。 但我想要一个休息之类的东西:如果 Neo4J 发现 versionFlag = 2 它将只返回相应的节点并丢弃其余节点。如果没有找到 versionFlag = 2,我只想获取具有最高 versionNumber 的节点。所以它是一种或者只有一个结果而不是现在两个。
【问题讨论】:
-
我使用我自己的测试数据尝试了您的查询,它有效。请分享您自己的测试数据,我会检查。谢谢。