返回语句中的Neo4j密码模式理解

wkyowqbh  于 2023-10-18  发布在  其他
关注(0)|答案(1)|浏览(106)

我需要在我的Cypher查询的return语句中添加以下模式解析:

[ (rc:Criterion) WHERE rc.id IN childD.replaceableCriterionIds | {entity: rc} ] AS decisionReplaceableCriteria

但它失败了,但有以下例外:

Caused by: org.neo4j.driver.exceptions.ClientException: Invalid input 'WHERE': expected "-", "<", <ARROW_LEFT_HEAD> or <ARROW_LINE>

它只在我添加与另一个节点的冗余关系时有效

[ (rc:Criterion)-[:CREATED_BY]->(:User) WHERE rc.id IN childD.replaceableCriterionIds | {entity: rc} ] AS decisionReplaceableCriteria

以下部分对我的需求来说是绝对多余的:

-[:CREATED_BY]->(:User)

有没有可能重写我的模式理解来避免这种冗余的语法?

6ojccjat

6ojccjat1#

如果您使用的是Neo4j 5.6+,则可以使用COLLECT子查询。下面是一个示例代码片段:

...
RETURN COLLECT {
    MATCH (rc:Criterion)
    WHERE rc.id IN childD.replaceableCriterionIds
    RETURN {entity: rc}
} AS decisionReplaceableCriteria

在Neo4j的早期版本中,您可以尝试破解:

...
RETURN [ (rc:Criterion)-[*0]->() WHERE rc.id IN childD.replaceableCriterionIds | {entity: rc} ] AS decisionReplaceableCriteria

这使用指定长度为0的可变长度路径模式。如果您想查看这个可变长度路径模式是否会导致任何DB命中,请PROFILE查询并查看VarLengthExpand操作的“db命中”。

相关问题