Шифр — как суммировать вес ребра для каждого узла

#neo4j #cypher #path-finding

#neo4j #шифр #поиск пути

Вопрос:

Предположим, что у нас есть следующая база данных:

 create (a:fooNode{name:'A'}),(b:fooNode{name:'B'}),(c:fooNode{name:'C'}),(d:fooNode{name:'D'}),(e:fooNode{name:'E'}),(p1:pNode{name:'p1'}),(p2:pNode{name:'p2'}),(a)-[e1:Edge{w:10}]->(p1),(b)-[e2:Edge{w:30}]->(p1),(c)-[e3:Edge{w:25}]->(p1),(d)-[e4:Edge{w:15}]->(p2),(e)-[e5:Edge{w:20}]->(p2), (source:fooNode{name:'Node 0'}), (source)-[:Edge]->(a), (source)-[:Edge]->(b), (source)-[:Edge]->(c), (source)-[:Edge]->(d), (source)-[:Edge]->(e)
  

Это изображение должно прояснить идею.
введите описание изображения здесь

Теперь мне интересно получить в результате сумму веса входящих узлов на «pNode». Что-то вроде:[ p1: 65, p2: 35]

Пожалуйста, обратите внимание, что я не могу знать имена узлов заранее, за исключением исходного узла, называемого ‘Node 0’ в примере DB. Во-первых, я думал о вычислении пути от ‘Node 0’ до любого ‘pNode’, но я не знаю, как действовать дальше.

Ответ №1:

Чтобы получить сумму входящих весов для всех pNodes :

 MATCH ()-[e]->(n:pNode)
RETURN n.name, sum(e.w) as weight
  

и для определенного pNode :

 MATCH ()-[e]->(n:pNode)
WHERE n.name = "p1"
RETURN n.name, sum(e.w) as weight