neo4j 获取符合条件的值

neo4j get values that match a criteria

我正在处理一个 neo4j 查询,试图 return 一个总所有权为 1(代表 100%)的节点。所以我总结了一个节点的所有权。我获取所有权总和的查询工作正常,如下所示:

match (o:owner)-[:mineral_interest_owner]->(w:well) return sum(o.ownership)

然后我尝试在表达式中使用它:

match (o:owner)-[:mineral_interest_owner]->(w:well) return sum(o.ownership) case when sum(o.ownership) = 1 then w.name else "None"

并得到这个错误: Neo.ClientError.Statement.SyntaxError: Invalid input 's': expected 'l/L' (line 3, column 3 (offset: 78)) "case" ^

这是我需要使用 APOC 的目的吗?

您需要聚合然后使用 where:

MATCH (o:owner)-[:mineral_interest_owner]->(w:well)
WITH w, 
     sum(o.ownership) AS cnt WHERE cnt = 1
RETURN w

除了您眼前的问题,您的数据模型似乎还需要改进。 ownership 属性 应该 而不是 owner 节点上,因为这意味着所有者对s/he 有兴趣。相反,ownership 属性 应该在 mineral_interest_owner 关系上——这将允许所有 ownership 百分比不同。

假设您将上述数据模型改进合并到您的数据库中,此查询应该 return 所有 owner/well 对,其中所有者拥有该井的 100%。

MATCH (owner:owner)-[i:mineral_interest_owner]->(well:well)
WITH owner, well, SUM(i.ownership) AS pct
WHERE pct = 1
RETURN owner, well;