Neo4j APOC Cypher 查询中的后续函数链

Neo4j APOC subsequent chain of functions in the Cypher query

我需要组织成 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 是否可以将其链接起来,如果可以,请举个例子。

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

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 将按行执行,因此您的决策结果应包含满足关联条件的任何决策.