WHERE 子句如何在密码查询中的 apache AGE 扩展中工作?

问题描述 投票:0回答:1

这是数据设置:

select * from cypher('test', $$ CREATE (david:Person {name: 'David'})
CREATE (alice:Person {name: 'Alice'})
CREATE (bob:Person {name: 'Bob'})
CREATE (charlie:Person {name: 'Charlie'})
CREATE (eve:Person {name: 'Eve'})

CREATE (david)-[:FRIEND]->(alice)
CREATE (david)-[:FRIEND]->(bob)
CREATE (david)-[:FRIEND]->(charlie)
CREATE (david)-[:FRIEND]->(eve)
CREATE (alice)-[:FRIEND]->(bob)                                    
CREATE (charlie)-[:FRIEND]->(bob)
CREATE (eve)-[:FRIEND]->(frank:Person {name: 'Frank'})
CREATE (frank)-[:FRIEND]->(eve) 
CREATE (alice)-[:FRIEND]->(charlie) $$ ) as (a agtype);

我正在搜索返回 David 的朋友并且有 2 个或更多外向关系的人的查询。根据文档,这个查询应该这样做:

SELECT *
FROM cypher('graph_name', $$
    MATCH (david {name: 'David'})-[]-(otherPerson)-[]->()
    WITH otherPerson, count(*) AS foaf
    WHERE foaf > 1
    RETURN otherPerson.name
$$) as (name agtype);

但是这会返回 Alice、Eve 和 Charlie。就像完全忽略了 WHERE 子句一样。正确的查询是什么?

cypher apache-age opencypher
1个回答
0
投票

Apache AGE 似乎确实忽略了 cypher 函数中的 WHERE 子句。一种方法是在 cypher 函数外使用 WHERE 子句并在 RETURN 子句中添加 foaf,就像这样:

SELECT * FROM cypher('test', $$
    MATCH (david {name: 'David'})-[]-(otherPerson)-[]->() 
    WITH otherPerson, count(*) AS foaf 
    RETURN otherPerson.name, foaf 
    $$) as (name agtype, foaf agtype)
    WHERE foaf > 1;

此查询返回每个人的名字,这些人是 David 的朋友,并且有 2 个或更多外向关系。根据提供的数据,应该是爱丽丝。

© www.soinside.com 2019 - 2024. All rights reserved.