【问题标题】:Neo4j APOC subsequent chain of functions in the Cypher queryNeo4j APOC Cypher 查询中的后续函数链
【发布时间】:2018-05-08 06:51:03
【问题描述】:

我需要组织成apoc.index.in函数的后续链(1..N调用),如下所示:

MATCH (d:Decision)-[:HAS_VALUE_ON]->(ch:Characteristic) WHERE ch.id = 10
CALL apoc.index.in(ch,'HAS_VALUE_ON','property.2.5:7 AND value:45') YIELD node AS decision

MATCH (decision)-[:HAS_VALUE_ON]->(ch:Characteristic) WHERE ch.id = 23
CALL apoc.index.in(ch,'HAS_VALUE_ON','property.1.8:326 OR property.4:17') YIELD node AS decision

MATCH (decision)-[:HAS_VALUE_ON]->(ch:Characteristic) WHERE ch.id = 19
CALL apoc.index.in(ch,'HAS_VALUE_ON','property.15.3:"mike" OR value:43') YIELD node AS decision

RETURN decision

如您所见,我需要根据 apoc.index.in 中描述的不同条件过滤Decision 的集合,例如'property.15.3:"mike" OR value:43' 等。

现在上面的查询不起作用。是否可以使用 APOC 进行链接,如果可以,请举例说明。

【问题讨论】:

    标签: neo4j cypher neo4j-apoc


    【解决方案1】:

    如果您可以发送包含您计划使用的值映射的列表参数,您应该能够做到这一点。例如,提供了一个列表参数:

    inputs = [{chId:10, predicate:"property.2.5:7 AND value:45"}, {chId:23, predicate:"property.1.8:326 OR property.4:17"}, {chId:19, predicate:"property.15.3:'mike' OR value:43"}]
    

    (根据您使用的语言,您需要找出伏都教以正确转义“mike”周围的内部引号)

    那么您可以使用以下查询:

    UNWIND $inputs as input
    MATCH (ch:Characteristic) 
    WHERE ch.id = input.chId AND ()-[:HAS_VALUE_ON]->(ch)
    CALL apoc.index.in(ch,'HAS_VALUE_ON', input.predicate) YIELD node AS decision
    RETURN decision
    

    由于集合上的 UNWIND,集合的每个元素都会产生自己的行,并且后续的 MATCH 和 CALL 将按行执行,因此您的决策结果应该包含任何符合相关条件的决策。

    【讨论】:

    • 非常感谢您的回答。我使用 Java,我将尝试实施建议的解决方案。我有关于结果集的其他问题 - 它是否包含满足所有相关标准的决策,或者它将包含满足任何相关标准的决策?根据我的业务逻辑,我需要只包含满足 $inputs 中提供的所有相关标准的决策的结果集。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    • 1970-01-01
    • 2015-11-01
    • 2017-12-24
    • 1970-01-01
    相关资源
    最近更新 更多