Запрос шифрования, который соответствует всем путям

У меня есть график с такими узлами, как «проект», «сотрудник» и «технология». Существуют отношения между проектом и технологией, а также между работником и технологией.

Я хочу найти сотрудников, которые знают все технологии, используемые в проекте. Мой cyper-запрос выглядит так:

start project=node:project(name = "Project1") 
match technology <-[:USED]- project , employee -[:KNOWS]-> technology 
return employee

При выполнении этого запроса я получаю всех сотрудников, которые знают одну технологию, используемую в проекте, и хочу, чтобы сотрудники знали все технологии, используемые в проекте. Возможно ли это в шифре?


person olemartin    schedule 08.04.2013    source источник


Ответы (2)


Вы можете попробовать что-то вроде:

start project=node:project(name = "Project1") 
match employee -[:KNOWS]-> technology <-[:USED]- project 
with count(technology) as knownTech, employee, project
where length(()<-[:USED]-project)=knownTech
return employee

См. раздел Поиск узлов, у которых есть все общие посредники.

person Luanne    schedule 08.04.2013
comment
Большое спасибо! Однако после проекта в предложении where есть дополнительная скобка. Кроме этого, отлично! Кстати, пришлось обновить neoclipse, чтобы использовать с и где, у меня была версия 2012 года. - person olemartin; 08.04.2013

Я бы, вероятно, использовал это, чтобы не подсчитывать количество технологий, используемых проектом на одного сотрудника:

start project=node:project(name = "Project1") 
match technology <-[:USED]- project 
with count(technology) as projectTech, project
match employee -[:KNOWS]-> technology <-[:USED]- project 
with count(technology) as knownTech, projectTech, employee
where projectTech=knownTech
return employee
person Michael Hunger    schedule 09.04.2013
comment
Логично, не подумал. Я переписал некоторые из своих запросов после stackoverflow.com/questions/14657265/ но теперь я вижу, что этот более эффективен, спасибо - person Luanne; 09.04.2013