Neo4j APOC последующая цепочка функций в запросе Cypher - PullRequest
0 голосов
/ 08 мая 2018

Мне нужно организовать в последующую цепочку (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

Как видите, мне нужно отфильтровать набор Decision на основе различных условий, описанных в apoc.index.in, например, таких как 'property.15.3:"mike" OR value:43' и т. Д.

В данный момент приведенный выше запрос не работает. Можно ли с помощью APOC связать это, и если да, не могли бы вы показать пример.

1 Ответ

0 голосов
/ 09 мая 2018

Вы сможете сделать это, если сможете отправить параметр списка, содержащий карты значений, которые вы планируете использовать.Например, при условии, что параметр списка:

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"}]

(вам нужно выяснить, вуду, чтобы избежать внутренних кавычек вокруг «Майк» правильно, учитывая язык, с которым вы работаете)

Тогда вы можете использовать следующий запрос:

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 будут выполняться в соответствии сстрока, поэтому результаты вашего решения должны содержать любое решение, которое соответствует связанным критериям.

...