为什么 != 运算符在我的 AGE 查询中不起作用?

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

当我尝试使用

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);

主要问题是

!=
运算符不起作用。我也尝试过使用
<>
运算符,但它仍然与其他没有“后端”标题的节点建立关系。

如何正确使用 != 运算符?

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

在给定的 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 的文档中找到它

参考资料:

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