Neo4j在多个节点上获得匹配和

时间:2018-04-12 03:51:59

标签: neo4j count sum cypher

我有一个问题,我一直在努力。

基本上我想要实现的是检查是否可以在多个节点中找到某个总和..例如..我有一个名为balance的属性的帐户节点。数据如下:25,2000,43,45,2000,65。

我希望能够检查此用户是否有超过2个帐户(例如..可能更多)。

不确定我是否自己解释得很好,而且我对密码世界不熟悉。

我将不胜感激。

由于

1 个答案:

答案 0 :(得分:0)

您可以通过采用帐户余额的所有组合,对两者进行求和以及比较来解决此问题。

APOC Procedures是Neo4j的一个插件,它添加了许多有用的过程和函数。其中一个apoc.coll.combinations()在这种情况下可以提供帮助,但是由于一个错误,它没有包含在3.3.0.1或3.3.0.2(当前可用于Neo4j 3.3.x的版本)中。

如果您使用的是3.2.x,或者下一个版本的APOC 3.3.x.x出现,您可以使用该函数生成列表元素的所有可能组合。

以下是使用示例:

WITH [25, 2000, 43, 45, 2000, 65] as balances
WITH apoc.coll.combinations(balances, 2) as combos
RETURN [combo in combos WHERE combo[0] + combo[1] = 4000] as balancesSummingto4k

在您的情况下,如果您只是想检查用户的余额是否与数字相加,则可能如下所示:

MATCH (:User{id:12345})-[:HAS_BALANCE]->(b:AccountBalance)
WITH apoc.coll.combinations(collect(b), 2) as combos
RETURN size([combo in combos WHERE combo[0].balance + combo[1].balance = 4000]) <> 0 as hasBalancesSummingTo4k