2016-10-09 2 views
0

Как и в случае с Cypher query to find nodes that are not related to other node by property, но все же достаточно, чтобы пнуть меня до сих пор.Запрос Cypher для поиска узлов с некоторыми отношениями, но не с другими

Persons, Languages, and Tasks

Лицо имеет право на задачи, если они отвечают требованиям языка и еще не имеет отношения к ней (например , делает или отвергнут).

Задачи могут зависеть друг от друга и «наследовать» их язык через 0 или более DEPENDS_ON rels и «root» Task REQUIRES.

Я пытаюсь создать запрос, который найдет & hellip;

  • p1 имеет право на t2 и t4
  • p2 имеет право на все 4
  • p3 не имеет права на

даже не заботясь о t1 «S сделали-Несс еще, я не думайте, что я перехожу через наследство языка.

Например, для p2:

MATCH (p:Person {name: 'p2'})-[:SPEAKS]->(lang) WITH p, collect(lang) AS langs MATCH (t:Task)-[:DEPENDS_ON*0]->(:Task)-[:REQUIRES]->(lang:Language) WHERE lang IN langs RETURN t

находит 0 строк

MATCH (p:Person {name: 'p2'})-[:SPEAKS]->(lang) RETURN lang

получает как Языки, так что я уверен, что collect(lang) as langs то, что я хочу (очень?) ,

Снятие :DEPENDS_ON* ссылки

MATCH (p:Person {name: 'p2'})-[:SPEAKS]->(lang) WITH p, collect(lang) AS langs MATCH (t:Task)-[:REQUIRES]->(lang:Language) WHERE lang in langs RETURN t

получает меня t1, t2 и t3.

Как я могу получить t4?

TIA!

ответ

2

Вы можете перемещаться по дорожкам гораздо более гибко, чем это. Поиск пути от человека к заданию через общий языковой узел - это один шаблон пути, даже если разные экземпляры пути могут проходить через отдельные языки. Затем вы можете расширить его, используя путь с переменной длиной 0+, чтобы найти задачи, зависящие от заданной задачи. Наконец, отфильтруйте любые пути, в которых задача связана с человеком, использующим один из недопустимых. отношения.

MATCH (p:Person) - [:SPEAKS] -> (:Language) <- [:REQUIRES] - (:Task) <- [:DEPENDS_ON*0..] - (t:Task) 
WHERE NOT (t) <- [:IS_DOING|:REJECTED] - (p) 
RETURN p, COLLECT(DISTINCT t) 
+0

Хорошая точка - думаю, мне нужно больше мышления на графике! –

Смежные вопросы