从Neo4j Cypher查询返回布尔值

6

我希望能够通过节点名称(而不是ID)来检查节点是否存在。Cypher查询的形式如下:

MATCH (c:Jaguar{name:"JLR 2.5Ltr"})-[:REPRESENTED_BY]->(v) RETURN c IS NOT NULL

然而,使用neo4j shell/web控制台返回的结果是字符串类型。在spring-data-neo4j中会出现错误:
Null return value from advice does not match primitive return type for: public abstract boolean xxx.yyy.repository.SomeRepository.checkIfDatasetExists(java.lang.String)

有人遇到过这个问题的解决方法吗?

3个回答

10

Supamiu提供的答案不起作用,不幸的是,您需要通过返回计数表达式来解决这个问题:

MATCH (c:Jaguar{name:"JLR 2.5Ltr"})-[:REPRESENTED_BY]->(v) 
RETURN count(c) > 0 as c

3
你应该使用CASE语句来检查节点是否为空,然后返回所需的值:
MATCH (c:Jaguar{name:"JLR 2.5Ltr"})-[:REPRESENTED_BY]->(v)
RETURN CASE WHEN c IS NULL THEN false ELSE true END as c

更多信息可以在Neo4j文档中找到。

1
感谢您的查询。我尝试进行测试,它运行良好。当我尝试在节点不存在的情况下使用相同的代码时,它返回“(无更改,无记录)”而不是false。 - Naveen

2
最新版本现已支持,您可以使用谓词函数:exists()
MATCH   (c:Jaguar{name:"JLR 2.5Ltr"})
RETURN  exists((c)-[:REPRESENTED_BY]->(v)) // returns boolean

Docs


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接