繁体   English   中英

动态 Neo4j Cypher 查询

[英]Dynamic Neo4j Cypher Query

有没有办法编写下面的 neo4j cypher 脚本来根据正在读取的数组的大小来处理 n 案例? 我有不同的数组大小来计算二氧化碳消耗量,因此使用一种适合所有情况的大小会非常低效。

MATCH paths = allShortestPaths((a: Flights {label: 'Paris'})-[: FLIGHT*]->(b:Flights {label: 'Sydney'}))
WITH paths, relationships(paths) AS rels
UNWIND rels AS rel
WITH paths, 
 collect(rel.co2) AS co2, 
 collect(rel.engine_consumption) as ec
RETURN 
  reduce(acc1=0.0,
      x IN range(0, size(fc)-1) |
            case when x=0 then acc1 + co2[x]
                  when x=1 then acc1 + co2[x] * ec[x-1]
                  when x=2 then acc1 + co2[x] * ec[x-1] * ec[x-2]
                  when x=3 then acc1 + co2[x] * ec[x-1] * ec[x-2] * ec[x-3] 
                  ...
                  when x=size(ec)-1 then acc1 + co2[x] * ec[x-1] * ... * ec[0] 
                  end
      )  AS normalised_co2
;

我最终使用 python 库 py2neo 完成了此操作,并使用 python 创建了 cypher 查询

case_when = ''
accumulator = ''
for x in range(max_paths):
    accumulator += f'* co2[{x}]'
    case_when += f'when x={x+1} then acc + co2[{x+1}]' + accumulator + ' \n '

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM