Neo4j:节点A和F之间的每个分支都耗费多少时间?

问题描述 投票:2回答:1

给出以下图表:

    -> B --> E -
   /            \ 
A -              -> F
   \            /
    -> C --> D -

所有节点都是task类型。作为属性,它们具有开始时间和结束时间(两者都是数据类型DateTime)。所有关系都是CONNECT_TO,并指向右侧。这种关系没有属性。

有人可以帮我解决以下查询在Cypher中应该是什么样子:节点A和F之间的每个分支都是多少时间?

结果列表没问题:

Path           Duration [minutes]
---------------------------------
A->B->E->F     100
A->C->D->F      50

谢谢你的帮助。

graph neo4j cypher
1个回答
1
投票

创建图表

第一个语句创建节点,第二个语句创建它们之间的关系。

CREATE
  (TaskA:Task {name: 'TaskA', time:10}),
  (TaskB:Task {name: 'TaskB', time:20}),
  (TaskC:Task {name: 'TaskC', time:30}),
  (TaskD:Task {name: 'TaskD', time:10}),
  (TaskE:Task {name: 'TaskE', time:40}),
  (TaskF:Task {name: 'TaskF', time:10})

CREATE
  (TaskA)-[:CONNECT_TO]->(TaskB),
  (TaskB)-[:CONNECT_TO]->(TaskE),
  (TaskE)-[:CONNECT_TO]->(TaskF),
  (TaskA)-[:CONNECT_TO]->(TaskC),
  (TaskC)-[:CONNECT_TO]->(TaskD),
  (TaskD)-[:CONNECT_TO]->(TaskF);

您想要的解决方案

  1. 定义起始节点(任务A)
  2. 寻找可变长度的路径
  3. 定义终端节点(任务F)
  4. 检索每个路径的所有任务节点
  5. 求和每条路径的所有任务的持续时间
  6. 额外奖励:每条路径的任务量

Neo4j声明:

//           |----------- 1 -----------|  |----- 2 ----|  |----------- 3 -----------|
MATCH path = (taskA:Task {name: 'TaskA'})-[:CONNECT_TO*]->(taskF:Task {name: 'TaskF'})
UNWIND
// |-- 4 -|
nodes(path) AS task
//           |---- 5 -----|                  |--- 6 ----|
RETURN path, sum(task.time) AS timeConsumed, length(path)+1 AS taskAmount;

结果

╒══════════════════════════════════════════════════════════════════════╤════════════════╤════════════╕
│"path"                                                                │ "timeConsumed" │"taskAmount"│
╞══════════════════════════════════════════════════════════════════════╪════════════════╪════════════╡
│[{"name":"TaskA","time":10},{},{"name":"TaskB","time":20},{"name":"Tas│80              │4           │
│kB","time":20},{},{"name":"TaskE","time":40},{"name":"TaskE","time":40│                │            │
│},{},{"name":"TaskF","time":10}]                                      │                │            │
├──────────────────────────────────────────────────────────────────────┼────────────────┼────────────┤
│[{"name":"TaskA","time":10},{},{"name":"TaskC","time":30},{"name":"Tas│60              │4           │
│kC","time":30},{},{"name":"TaskD","time":10},{"name":"TaskD","time":10│                │            │
│},{},{"name":"TaskF","time":10}]                                      │                │            │
└──────────────────────────────────────────────────────────────────────┴────────────────┴────────────┘
© www.soinside.com 2019 - 2024. All rights reserved.