Соответствующие пересечения / комбинации в шифре - PullRequest
0 голосов
/ 28 июня 2018

У меня есть график, где зеленые узлы могут быть связаны с одним или несколькими красными узлами, которые затем связываются с набором синих узлов. Красные узлы также имеют свойство amt, которое указывает минимальное количество синих узлов в наборе, которые должны быть сопоставлены, чтобы «удовлетворить» красный узел. Данный набор синих узлов «подходит» для зеленого узла, если набор удовлетворяет всем красным соседям зеленого узла.

Пример

enter image description here

enter image description here

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

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

MATCH (g:Green)-->(r:Red)-->(b:Blue)
WITH g, COLLECT(b.name) AS myset
WHERE ALL(n in myset where n in ["1", "2", "3", "4", "8", "9", "11"])
RETURN p

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Этот запрос должен возвращать Green узлы, чьи "обязательные" Red узлы все имеют по крайней мере свои индивидуально требуемые amt из "содержащихся" Blue узлов:

MATCH (g:Green)-[:requires]->(r:Red)
WITH g, r, SIZE((r)-[:contains]->(:Blue)) AS cnt
WITH g, COLLECT({r: r, cnt: cnt}) AS data
WHERE ALL(d IN data WHERE d.cnt >= d.r.amt)
RETURN g;
0 голосов
/ 28 июня 2018

Сначала вам нужно найти всех зеленых кандидатов, а затем проверить их через красные узлы:

WITH ["1", "2", "3", "4", "8", "9", "11"] AS blues
MATCH (g:Green)-[:requires]->(r:Red)-[:contains]->(b:Blue) WHERE b.name IN blues

WITH distinct g, blues
MATCH (g)-[:requires]->(r:Red)
OPTIONAL MATCH (r)-[:contains]->(b:Blue) WHERE b.name IN blues

WITH g, r, size(collect(DISTINCT b)) AS bCount
WITH g, collect([r.amt, bCount]) AS test
WITH g WHERe all(t IN test WHERE t[0] <= t[1])
RETURN g
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...