Cypher - 如何计算每个节点的边权重
Cypher - How to sum edge weight for each node
假设有以下数据库:
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' 在示例数据库中。首先,我想计算从 'Node 0' 到 'pNode' 的路径,但我不知道如何进一步进行。
获取所有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
假设有以下数据库:
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' 在示例数据库中。首先,我想计算从 'Node 0' 到 'pNode' 的路径,但我不知道如何进一步进行。
获取所有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