Это в продолжении Neo4j: Listing node labelsNeo4j: Условный возврат/IF манипуляция пункта/String
Я Построив динамический оператор MATCH вернуть иерархическую структуру & использовать вывод как вход Neo4j JDBC для запроса данных из метод Java:
match p=(:Service)<-[*]-(:Anomaly)
with head(nodes(p)) as Service, p, count(p) as cnt
return DISTINCT Service.company_id, Service.company_site_id,
"MATCH srvhier=(" +
reduce(labels = "", n IN nodes(p) | labels + labels(n)[0] +
"<-[:BELONGS_TO]-") + ") WHERE Service.company_id = {1} and
Service.company_site_id = {2} and Anomaly.name={3} RETURN " +
reduce(labels = "", n IN nodes(p) | labels + labels(n)[0] + ".name,");
выход следующим образом:
MATCH srvhier=(Service<-[:BELONGS_TO]-Category<-[:BELONGS_TO]-SubService<-
[:BELONGS_TO]-Assets<-[:BELONGS_TO]-Anomaly<-[:BELONGS_TO]-) WHERE
Service.company_id = {1} and Service.company_site_id = {21} and
Anomaly.name={3} RETURN Service.name, Category.name, SubService.name,
Assets.name, Anomaly.name,
проблема я вижу:
"BELONGS_TO" добавляемый к моему последнему узлу
Line 2: Активы < - [: BELONGS_TO] -Anomaly ** < - [: BELONGS_TO] - **
Существуют строковые функции (Я посмотрел на Substring ..), который можно использовать для его удаления? Или я могу использовать оператор CASE с условием n = cnt для добавления «BELONGS_TO»?
Та же проблема сохраняется с моей последней строке:
Линия 5: Assets.name, Anomaly.name **, ** - дополнительный "" что мне нужно устранить.
Спасибо.
У меня есть иерархия нескольких организаций. Связь не фиксирована .. значение - если 1 организация имеет (a) -> (b) -> (c), то другая может быть (a) -> (c). Итак, первое, что я делаю, это сбор информации о иерархии. На основе иерархии я пытаюсь получить детали (с точки зрения атрибутов/свойств, которые еще не исправлены). Если есть более простой способ сделать это, он будет более чем счастлив использовать его. Как вы думаете, я должен использовать небольшую БД для хранения метаданных иерархии и тем самым избегать первого совпадения. – kkulkarn