У меня есть запрос на шифр (ниже). Это работает, но мне было интересно, есть ли более элегантный способ написать это.количество подключенных узлов к определенным узлам в пути
На основании данного стартового узла, запрос пытается:
Найдите следующий шаблон/мотив:
(inputko)-->(:cpd)-->(ko2:ko)-->(:cpd)-->(ko3:ko)
.Foreach мотивы/шаблоны найдены, найти подключенные узлы с метками
contigs
, для следующих узлов в схеме: [inputko
,ko2
,ko3
].Краткое описание трех узлов и их подключенных коннигов, т.е. имя свойства
.ko
из 3 узлов и количество подключенных:contig
узлов в каждом из найденных мотивов(inputko)-->(:cpd)-->(ko2:ko)-->(:cpd)-->(ko3:ko)
.+--------------------------------------------------------------------------+ | KO1 | KO1count | KO2 | KO2count | KO3 | KO3count | +--------------------------------------------------------------------------+ | "ko:K00001" | 102 | "ko:K14029" | 512 | "ko:K03736" | 15 | | "ko:K00001" | 102 | "ko:K00128" | 792 | "ko:K12972" | 7 | | "ko:K00001" | 102 | "ko:K00128" | 396 | "ko:K01624" | 265 | | "ko:K00001" | 102 | "ko:K03735" | 448 | "ko:K00138" | 33 | | "ko:K00001" | 102 | "ko:K14029" | 512 | "ko:K15228" | 24 | +--------------------------------------------------------------------------+
Я озадачен синтаксис для работы на каждом матче. Из документации оговорка foreach
не похоже на то, что мне нужно. Любые идеи парней?
Предложение FOREACH используется для обновления данных в коллекции, будь то компонентов пути или результата агрегирования.
Коллекции и пути являются ключевыми понятиями в Cypher. Чтобы использовать их для обновления данных , вы можете использовать конструкцию FOREACH. Он позволяет делать команды для элементов в коллекции - путь или набор , созданный путем агрегации.
START
inputko=node:koid('ko:\"ko:K00001\"')
MATCH
(inputko)--(c1:contigs)
WITH
count(c1) as KO1count, inputko
MATCH
(inputko)-->(:cpd)-->(ko2:ko)-->(:cpd)-->(ko3:ko)
WITH
inputko.ko as KO1,
KO1count,
ko2,
ko3
MATCH
(ko2)--(c2:contigs)
WITH
KO1,
KO1count,
ko2.ko as KO2,
count(c2) as KO2count,
ko3
MATCH
(ko3)--(c3:contigs)
RETURN
KO1,
KO1count,
KO2,
KO2count,
ko3.ko AS KO3,
count(c3) AS KO3count
LIMIT
5;
понял, что я должен поместить в отличие для count(distinct cX)
, чтобы получить точный подсчет. Не знаю почему.
согласен с вами по этому вопросу. «Если вы должны были переносить количество контрсов на каждом узле ko, тогда вы можете выполнить такой запрос, чтобы вернуть номер kos« возможно, все обновления узлов KO для хранения этой информации! это сделает запрос слишком быстрым – altimit