Neo4j-шифровальный запрос для получения количества связей с узлом для каждой отдельной метки - PullRequest
0 голосов
/ 20 мая 2019

У меня есть следующие обстоятельства:

Два типа узлов; NodeA и NodeB. NodeB имеет множество различных меток (например, [LABEL_i, LABEL_j, etc...]), и я хочу найти количество отношений (скажем, LIKES) от NodeA до NodeB для каждой метки на NodeB.

Для одного ярлыка я могу сделать следующее:

MATCH (a:NodeA {uid: "<id>"})-[r:LIKES]-(b:NodeB:LABEL_i) RETURN count(b) as count

Для которого я получаю число связей с NodeB с меткой LABEL_i.

Я должен быть в состоянии объединить вышеупомянутую логику в один запрос к Neo4j, но я не могу заставить его работать, я попробовал следующие подходы (только поля в ответе):

MATCH (a:NodeA {uid: "<id>"})-[r:LIKES]-(b:NodeB) RETURN DISTINCT LABELS(b), count(b), SIZE(LABLES(b)) 

Но данные, которые я получил от этого, были не тем, чего я ожидал или нуждался, и я не могу найти другие подходящие подходы, вот что я тоже попробовал

FOREACH (lab in ["LABEL_i", "LABEL_j"] | 
  MATCH (a:NodeA {uid: "<id>"})-[r:LIKES]-(b:lab) RETURN count(b) as count
)
Neo.ClientError.Statement.SyntaxError: Invalid use of MATCH inside FOREACH (line 2, column 3 (offset: 49))

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

1 Ответ

0 голосов
/ 20 мая 2019

Когда вы пишете здесь вопрос, вы всегда находите ответ, или через некоторое время после публикации вы наталкиваетесь на правильное решение.

Вот то, к чему я привыквыполнить задачу:

MATCH (a:NodeA {uid: "<id>"})-[r:LIKES]-(b:NodeB)
WITH DISTINCT labels(b) AS labels
UNWIND labels AS label
RETURN DISTINCT label, count(label)
ORDER BY label
...