Соответствие нескольким переменным в Cypher - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь подсчитывать / перечислять людей с определенными навыками для каждого работодателя / организации. Навык определяется для человека в зависимости от того, прошел ли он одно из двух конкретных событий курса). Человек может либо [: WORK_AT] -> Dep - [: PART_OF] -> Org, либо [: WORK_AT] -> Org. Используя прилагаемый (неэлегантный) код, я могу составить список лиц для одной организации, но изо всех сил пытаюсь найти способы сделать это для всех организаций (анисаций) (работодателей).

MATCH (p:Person)-->(l:Event), (o:Org)<--()<-[:WORKS_AT]-(p:Person) 
WHERE (l.name="course a1" OR l.name="course a2") 
AND o.name="University A" 
RETURN o.name, count(DISTINCT(p))

1 Ответ

0 голосов
/ 21 октября 2019

Так что это идеальный случай, когда у вас могут быть дополнительные связи / отношения, которые могут быть или не быть там.

Традиционно вы можете обратиться к UNION, чтобы сделать это, но у нас на самом деле есть статья базы знанийна альтернативах запросам UNION , которые предоставляют другую опцию, где мы используем отношение переменной длины с нижней границей 0, что означает, что мы можем сопоставлять пути, где это отношение даже не существует в шаблоне.

В вашем случае использование будет выглядеть так:

MATCH (p:Person)-->(l:Event), (o:Org)<-[:PART_OF*0..1]-()<-[:WORKS_AT]-(p:Person) 
WHERE (l.name="course a1" OR l.name="course a2") 
AND o.name="University A" 
RETURN o.name, count(DISTINCT(p))
...