Neo4j 沿着路径创建新的关系
假设此拓扑:Neo4j 沿着路径创建新的关系,neo4j,cypher,Neo4j,Cypher,假设此拓扑: create (mbp {name: "MacBookPro"}), (fb {name:"FritzBox"}), (eue {name: "1u1"}), (inet {name:"Internet"}), (mnh {name:"Mannheim"}), (hdb {name:"Heidelberg"}), (stg {name: "Stuttgart"}), (lnd {name:"Lindt"}), (ylo {name:"Ylo"}), (qvin
create
(mbp {name: "MacBookPro"}),
(fb {name:"FritzBox"}),
(eue {name: "1u1"}),
(inet {name:"Internet"}),
(mnh {name:"Mannheim"}),
(hdb {name:"Heidelberg"}),
(stg {name: "Stuttgart"}),
(lnd {name:"Lindt"}),
(ylo {name:"Ylo"}),
(qvin {name:"Qvin"}),
(mbp) -[:LNK {bw:100}]->(fb),
(fb)-[:LNK {bw:32}]->(eue),
(eue)-[:LNK {bw:10000}]->(inet),
(inet)-[:LNK {bw:10000}]->(mnh),
(mnh)-[:LNK {bw:10000}]->(hdb),
(hdb)-[:LNK {bw:1000}]->(lnd), // Route option 1
(mnh)-[:LNK {bw:10000}]->(stg),
(stg)-[:LNK {bw:10000}]->(lnd), // Route option 2
(lnd)-[:LNK {bw:1000}]->(ylo),
(lnd)-[:LNK {bw:1000}]->(qvin),
(ylo)-[:LNK {bw:1000}]->(qvin)
我可以使用此查询获取“MacBookPro”和“Ylo”之间的最大带宽路径:
其次是:
match (a)-[r:LNK {session : 1}]->(b) create (a)-[:SESSION_RTP{id:1}]->(b)
是否可以将其压缩为一条语句?阅读评论后 我知道只有最小bw的路径才应该有与名为
SESSION\u RIP
的关系连接的节点
试试下面
match (s {name:"MacBookPro"}),
(t {name:"Ylo"}),
p=allShortestPaths(s-[*]-t)
with
p as path,
reduce( mini=100000,
r in relationships(p) |
case when mini < r.bw then mini else r.bw end)
as maximal_bandwidth
order by maximal_bandwidth desc limit 1
with relationships(p) as rels
foreach (t in rels |
foreach (a in [startNode(t)]|
foreach (b in [endNode(t)]|
CREATE a-[:SESSION_RTP]->b
)))
match(s{name:“MacBookPro”}),
(名称:“YO”}),
p=所有最短路径(s-[*]-t)
具有
p作为路径,
减少(最小值=100000,
关系中的r(p)|
最小值b
)))
您只想让匹配查询的特定路径中的所有节点通过session\u key连接,对吗?您可以使用“FOREACH(n in relationships(path)| SET n.session\u RTP=“a”)”并向该路径中的每个关系添加一个属性,然后您可以执行“match(a)-[r:LNK{session RPT:“a”]->(b)创建(a)-[r:session RPT]>(b)'我不确定如何将其应用于单个路径。找到解决方案了吗?尝试查询时,我得到以下错误无效输入's':应为'n/n'(第4行,第57列)“节点(p)作为路径节点,范围(1,计数(节点(p))作为节点长度”
对不起,我对cypher比较陌生,但您建议的解决方案是否会将所有最短路径的所有节点与会话\u RTP
关系连接起来?我无法证实我的怀疑,因为您的查询不会在我的neo4j 2.0.0上运行。尝试您当前的解决方案会产生:p未定义(第11行,第28列)“匹配节点中的a(p)”^
错误越来越有趣:Neo.DatabaseError.Statement.ExecutionFailure
match (a)-[r:LNK {session : 1}]->(b) create (a)-[:SESSION_RTP{id:1}]->(b)
match (s {name:"MacBookPro"}),
(t {name:"Ylo"}),
p=allShortestPaths(s-[*]-t)
with
p as path,
reduce( mini=100000,
r in relationships(p) |
case when mini < r.bw then mini else r.bw end)
as maximal_bandwidth
order by maximal_bandwidth desc limit 1
with relationships(p) as rels
foreach (t in rels |
foreach (a in [startNode(t)]|
foreach (b in [endNode(t)]|
CREATE a-[:SESSION_RTP]->b
)))