【问题标题】:Return only one Boolean Row in Cypher instead of Null在 Cypher 中只返回一个布尔行而不是 Null
【发布时间】:2015-10-06 10:23:44
【问题描述】:

我有一个图表,其中包含“Persons”等节点和名为“RELATION”的关系,其动态类型为“BIOLOGICAL_MOTHER”。

要检查一个人是否处于父角色中,我想使用一个返回一个布尔行的密码查询,而不是 NULL 或其他内容。

我使用 Spring Data Neo4j 4,这是 person-repository 中的以下方法:

@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
$MyIteratorWrapper@235ecd9f. 
First element is 'true' and the second element is 'false'

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

【问题讨论】:

    标签: cypher spring-data-neo4j


    【解决方案1】:

    我用这个查询解决了我的问题:

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

    如果有更简单的方法解决我的问题,请发表评论。

    【讨论】:

      猜你喜欢
      • 2011-09-13
      • 1970-01-01
      • 2020-02-23
      • 2017-04-22
      • 2020-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多