neo4j获取符合条件的值

时间:2018-10-01 00:34:23

标签: neo4j neo4j-apoc

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

version: '2' services: app: build: context: . dockerfile: Dockerfile image: myexampleapp ports: - 8080:80 tty: true volumes: - .:/var/www/example links: - mysql mysql: image: mysql:5.7.22 ports: - 33060:3306 environment: MYSQL_DATABASE: test MYSQL_ROOT_PASSWORD: dev volumes: - ./data:/var/lib/mysql

所以我尝试在表达式中使用它:

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"

使用APOC是否需要此功能?

2 个答案:

答案 0 :(得分:1)

您需要先汇总然后使用where

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

答案 1 :(得分:1)

除了您的紧迫问题,您的数据模型似乎还需要改进。 ownership属性不应 位于owner节点上,因为这将意味着所有者对其有兴趣的所有井具有完全相同的所有权百分比。相反,ownership属性应该位于mineral_interest_owner关系上,这将允许所有ownership百分比都不同。

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

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