#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