当我尝试使用
STACK_MATCH
关系连接具有“后端”Person
的title
节点时,我遇到了一个问题,同时避免Person
节点最终与自己相关。
SELECT * FROM cypher('devbook', $$
MATCH (a: Person), (b: Person)
WHERE a.title = 'backend' AND b.title = 'backend' AND id(a) != id(b)
CREATE (a)-[e:STACK_MATCH { title: 'backend' }]->(b) RETURN e
$$) as (relationship agtype);
主要问题是
!=
运算符不起作用。我也尝试过使用 <>
运算符,但它仍然与其他没有“后端”标题的节点建立关系。
如何正确使用 != 运算符?
在给定的 Apache AGE PostgreSQL 查询中,错误出现在行 AND id(a) != id(b) 中。 id() 函数的使用在此上下文中无效,因为它是一个 Cypher 函数,只能用于 Cypher 查询,不能用于 PostgreSQL 查询
纠正这个错误的一种方法是使用vertex.id属性来比较查询中顶点的id,如下:
SELECT *
FROM cypher('devbook', $$
MATCH (a: Person), (b: Person)
WHERE a.title = 'backend' AND b.title = 'backend' AND a.vertex_id <> b.vertex_id
CREATE (a)-[e:STACK_MATCH { title: 'backend' }]->(b) RETURN e
$$) as (relationship agtype);
在这个更正的查询中,我用 vertex_id 属性替换了 id() 函数来比较顶点的 id。 vertex_id 属性是 AGE 特定属性,在标准 Cypher 语法中不可用。
请注意,要使用 AGE 特定属性(如 vertex_id),查询必须在 AGE 数据库的上下文中运行
注意 != 被替换为 <> 你可以在 AGE 的文档中找到它
参考资料: