Cypher Query: установить свойство на основе отношения на основе совокупности других отношений свойств - PullRequest
0 голосов
/ 07 мая 2020

Я все еще промочу кибер.

У меня следующая ситуация. Каждое отношение BM_RU имеет значение FinCYTD. n имеет несколько отношений BM_RU с ru. Я пытаюсь добавить или установить свойство bm, которое представляет собой сумму значений FinCYTD в этих отношениях.

match (n:BrickMrtr)-[b:BM_RU]->(ru:RU)<-[bm:BM_RU_F]-(n)
where n.Id = '1000829'
with n.Id as bm, sum(toInteger(b.FinCYTD)) as sum_f, ru.RuName as nm, bm.Amt as bm_amt
set bm_amt = sum_f

Я думал, что это сработает, но получаю следующую ошибку:

Type mismatch: expected Map, Node or Relationship but was Integer (line 5, column 14 (offset: 239))
"set bm_amt = sum_f"
              ^

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

Это сделает то, что вы, вероятно, планировали:

MATCH (n:BrickMrtr)-[b:BM_RU]->(ru:RU)<-[bm:BM_RU_F]-(n)
WHERE n.Id = '1000829'
WITH n, ru, bm, SUM(toInteger(b.FinCYTD)) as sum_f
SET bm.Amt = sum_f

Вы должны присвоить значение свойству (SET bm.Amt = ...). Вы пытались присвоить значение другой переменной (SET bm_amt = ...).

Кроме того, этот запрос использует n, ru и bm в качестве ключей группировки для функции агрегирования SUM, так что каждая сумма соответствует отдельной комбинации n / ru / bm. (Я предполагаю, что каждый ru имеет только один связанный bm.)

0 голосов
/ 07 мая 2020

Можете попробовать это?

match (n:BrickMrtr)-[b:BM_RU]->(ru:RU)<-[bm:BM_RU_F]-(n)
where n.Id = '1000829'
with n, sum(toInteger(b.FinCYTD)) as sum_f
set bm.amt = sum_f
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...