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