NEO4J-基于最大值或最小值的返回节点

时间:2019-03-03 13:00:52

标签: networking graph neo4j cypher

我使用以下命令构建了一个网络:

LOAD CSV WITH HEADERS FROM 'file:///trial.csv' AS row
MERGE(s:Person {id: row.Sender})
MERGE(r:Person {id: row.Receiver})
SET r.goodness = row.`goodness`
MERGE (s)-[hr:SENDS_TO]->(r)
SET hr.fairness = row.fairness

,我想返回具有最高善良或公平关系的节点。我只能用这个:

MATCH (s:Person)
RETURN max(s.goodness)

返回最大善良分数 并用它来返回人,但无法正常工作:

MATCH (s:Person)
WHERE s.goodness = max(s.goodness)
return s

知道我要去哪里了吗?

1 个答案:

答案 0 :(得分:1)

您可能已经忘了将您的善良/公正变成数字!与toIntegertoFloat

是的,因为您正在进行的聚合只能在投影(WITH或RETURN)中而不是在表达式中进行。您有两种选择:

MATCH (s:Person)
RETURN s
ORDER BY s.goodness DESC LIMIT 1

(如果您使用的是3.5,并且具有s.goodness的索引并使用此语句,则可以从基于索引的排序中受益)。

MATCH (s:Person)
WHERE s.goodness > 0
RETURN s
ORDER BY s.goodness DESC LIMIT 1

或者您可以使用这种方法,这种方法要贵一些,并且还需要良好的索引才能正常运行。

MATCH (s:Person)
WITH max(s.goodness) as max
MATCH (s:Person) WHERE s.goodness = max
RETURN s

(可能返回一个以上的人)