neo4j: несколько значений после с - PullRequest
0 голосов
/ 29 ноября 2018

Я начал работать с neo4j и создал простой график для практики.Он содержит студентов, которые работают в проектах.

Я хотел бы получить студентов, которые работают в более чем 2 проектах и ​​соответствующих проектах, например:

match (s:Student)-[w:WORKSON]->(p:Project) 
with s, p, count(w) as w_count 
where w_count > 2 return s, p

, это не дает мне никакого результата.Однако, когда я делаю это

match (s:Student)-[w:WORKSON]->(p:Project) 
with s, count(w) as w_count 
where w_count > 2 return s

, я получаю правильных студентов, и когда я делаю это

match (s:Student)-[w:WORKSON]->(p:Project) 
with p, count(w) as w_count 
where w_count > 2 return p

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

1 Ответ

0 голосов
/ 29 ноября 2018

Вам нужно посмотреть документацию для агрегирующих функций (например, COUNT) и как они работают с grouping keys.

Например, в первом запросе:

match (s:Student)-[w:WORKSON]->(p:Project) 
with s, p, count(w) as w_count 
where w_count > 2 return s, p

ключами группировки являются s и p, поэтому COUNT(w) будет только подсчитывать, сколько существует WORKSON отношений между данной парой узлов s и p (которые имеютхотя бы одна такая связь между ними).Это число всегда будет равно 1, поэтому тест WHERE всегда будет неудачным.

Чтобы «извлечь студентов, которые работают в более чем 2 проектах и ​​соответствующих проектах», попробуйте следующее:

MATCH (s:Student)-[:WORKSON]->(p:Project) 
WITH s, COLLECT(p) AS ps
WHERE SIZE(ps) > 2
RETURN s, ps
...