2015-10-06 67 views
0

我有一个像'Persons'这样的节点和一个名为'RELATION'的关系与一个像'BIOLOGICAL_MOTHER'这样的动态类型的图。在Cypher中只返回一个布尔行,而不是零

要检查,如果一个人在家长的角色我想用一个暗号查询返回一个布尔值列,而不是NULL或别的东西。

我使用Spring数据的Neo4j 4,这是人的仓库下面的方法:

@Query("OPTIONAL MATCH (child)-[r:RELATION]->(parent) " + 
     "RETURN DISTINCT " + 
     "CASE " + 
     "WHEN id(parent)={0} AND r IS NOT NULL AND (r.type='BIOLOGICAL_MOTHER' OR r.type='BIOLOGICAL_FATHER') " + 
     "THEN true " + 
     "ELSE false " + 
     "END") 
boolean isParentRole(long id); 

如果我查询这对父母的人,下面的错误回报:

More than one element in org.neo4j.helpers.collection.IterableWrapper 
[email protected] 
First element is 'true' and the second element is 'false' 

如何使用所有结果行的“或”来返回只有一行(在这种情况下为true)?

回答

0

我解决我的问题与此查询:

@Query("OPTIONAL MATCH (child)-[r:RELATION]->(parent) " + 
     "WITH (CASE WHEN id(parent)={0} AND r IS NOT NULL " + 
     "AND (r.type='BIOLOGICAL_MOTHER' OR r.type='BIOLOGICAL_FATHER') THEN true ELSE false END) as check " + 
     "RETURN ANY (x in collect(check) WHERE x=true) ") 
boolean isParentRole(long id); 

如果一个简单的方法解决我的问题,请评论。