Неправильный результат при подсчете узлов в списке - PullRequest
0 голосов
/ 17 апреля 2020

Вот мой запрос:

WITH ["a", "b", "c", "d"] as list
MATCH (n:Node)-[]-(g:Group)-[]-(n2:Node) WHERE n.name IN list
RETURN g, COUNT(n) AS intersection, COUNT(n)+COUNT(n2) AS groupSize

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

Проблема: неверный результат

intersection = {number of Nodes connected to Group g} - 1
groupSize = 2 * ({number of Nodes connected to Group g} - 1)

Что не так с моим запросом?

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

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

WITH ["a", "b", "c", "d"] as list
MATCH  (n:Node)--(g:Group)
WHERE n.name IN list
WITH g, COUNT(n) as intersectionSize
MATCH (n2:Node)--(g)
RETURN g, COUNT(n2) as groupSize, intersectionSize
ORDER BY intersectionSize DESC

Я надеялся на что-то более лаконичное, но хорошо ...

0 голосов
/ 17 апреля 2020

[EDITED]

Не следует использовать шаблон MATCH, содержащий пару Node узлов, поскольку это создает много повторяющихся вхождений каждого узла. Кроме того, одна и та же пара будет найдена дважды (в обратном порядке).

Этот запрос, вероятно, будет делать то, что вы хотите:

WITH ["a", "b", "c", "d"] as list
MATCH (n:Node)--(g:Group)
WITH list, g, COLLECT(n) AS ns
WITH g, SIZE(ns) AS groupSize, SIZE([x IN ns WHERE x.name IN list]) AS intersection
WHERE intersection > 0
RETURN g, groupSize, intersection
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...