我需要组织1..N
函数的后续链(apoc.index.in
调用),如下所示:
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链接起来,如果可以的话,请你展示一个例子。
答案 0 :(得分: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将按行执行,因此您的决策结果应包含符合相关条件的任何决策。 / p>