Возможно ли добиться такого типа фильтрации с помощью шифра

#cypher #redisgraph

Вопрос:

У меня есть DSL для запроса RedisGraph, который выглядит так:

 App::Graph.query(movie: { title: 'Matrix' }, country: { value: 'Italy' , value: 'Spain', value: 'Greece' })  

Который создает этот запрос на шифрование:

 MATCH (m:Movie)lt;-[:ACTED_IN]-(a:Actor) WHERE m.title = 'Matrix' WITH m, collect(a) as actors WHERE 1 = 1 AND (movie)lt;-[:AVAILABLE_IN]-(:Country {value: 'Italy'}) AND (movie)lt;-[:AVAILABLE_IN]-(:Country {value: 'Spain'}) AND (movie)lt;-[:AVAILABLE_IN]-(:Country {value: 'Greece'}) RETURN actors, m  

Вопрос: в некоторых случаях Country узел, например Испания, не будет иметь edges , и поэтому в настоящее время приведенный выше запрос на шифрование справедливо не вернет результатов. Но можно ли переписать приведенный выше запрос так, чтобы он игнорировал Country узел, если у него нет ребер, совпадающих и возвращающих узлов, которые подключены к оставшемуся первоначально определенному списку стран, т. е. Италии, Греции?

Я перепробовал много вариантов, ниже приведен последний, но не нашел способа достичь этого

 MATCH (m:Movie)lt;-[:ACTED_IN]-(a:Actor) WHERE m.title = 'Matrix' WITH m, collect(a) as actors MATCH (m)lt;-[:AVAILABLE_IN]-(connected_countries) WHERE connected_countries.value IN ['Italy', 'Spain', 'Greece'] WITH m, actors, collect(connected_countries.value) as relevant_countries WHERE 1 = 1 AND ((movie)lt;-[:AVAILABLE_IN]-(:Country {value: 'Italy'}) AND IN relevant_countries) AND ((movie)lt;-[:AVAILABLE_IN]-(:Country {value: 'Spain'}) AND IN relevant_countries) AND ((movie)lt;-[:AVAILABLE_IN]-(:Country {value: 'Greece'}) AND IN relevant_countries) RETURN actors, m  

Ответ №1:

Пожалуйста, попробуйте:

 MATCH (m:Movie {title:'Matrix'}) WITH m AS m UNWIND ['Italy', 'Spain', 'Greece'] AS country_name MATCH (:Country {value: country_name})-[:AVAILABLE_IN]-gt;(m)lt;-[:ACTED_IN]-(a:Actor) WITH m, collect(a) as actors RETURN actors, m  

Комментарии:

1. Эй, @SWilly22 спасибо, что вернулись, при использовании вашего запроса я получаю дополнительные результаты, так как сопоставление выполняется по каждой стране по одному, а не по всем, и, возможно, я неправильно сформулировал вопрос, но, по сути, я ожидаю, что будут возвращены только фильмы, у которых есть границы для всех стран. Чтобы добавить, я получил возможность сделать это с момента публикации этого вопроса и сделал это, подсчитав количество ребер, однако теперь столкнулся с проблемой, когда некоторые из моих запросов должны обрабатывать (И) ИЛИ ) случаи, а также (И) И). Существует ли временная шкала для поддержки понимания шаблонов?