Graph Neo4j:节点A和F之间的每个分支有多耗时?

Graph Neo4j:节点A和F之间的每个分支有多耗时?,graph,neo4j,cypher,Graph,Neo4j,Cypher,下图所示: -> B --> E - / \ A - -> F \ / -> C --> D - 所有节点都属于task类型。作为属性,它们有一个开始时间和一个结束时间(都是数据类型DateTime)。 所有关系都连接到并指向右侧。这些关系没有属性 有人能告诉我以下查询在Cypher中应该是什么样子的吗 节点A和F之间的每个分支有多耗时 因此,列出一份清单就可以了:

下图所示:

    -> B --> E -
   /            \ 
A -              -> F
   \            /
    -> C --> D -
所有节点都属于task类型。作为属性,它们有一个开始时间和一个结束时间(都是数据类型DateTime)。 所有关系都连接到并指向右侧。这些关系没有属性

有人能告诉我以下查询在Cypher中应该是什么样子的吗 节点A和F之间的每个分支有多耗时

因此,列出一份清单就可以了:

Path           Duration [minutes]
---------------------------------
A->B->E->F     100
A->C->D->F      50
感谢您的帮助。

创建图表 第一条语句创建节点,第二条语句创建节点之间的关系

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);
您想要的解决方案
  • 定义开始节点(任务A)
  • 寻找变长路径
  • 定义结束节点(任务F)
  • 检索每个路径的所有任务节点
  • 对每个路径的所有任务的持续时间求和
  • 奖励:每条路径的任务量
  • 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;
    
    结果
    这对我来说太完美了。谢谢附加问题:是否可以设置路径列的格式?目前显示了所有属性,但如果只显示路径中每个节点的属性“name”就足够了。我找到了一个解决方案:返回reduce(s=head(nodes(path)).name,n in tail(nodes(path))|s+“->”+n.name)作为NodesInBranch,…@Riegel您也可以使用reduce来获得总和,而无需先解开路径。我很高兴听到建议的答案对您非常适用。很高兴提供帮助-欢迎使用Stack Overflow。如果你认为建议的解决方案对你的问题有帮助,请考虑接受答案。您可以通过单击答案旁边的复选标记将答案从灰显切换为绿色填充,将答案标记为已接受。这有助于社区将重点放在老问题上,而不是回答问题。
    ╒══════════════════════════════════════════════════════════════════════╤════════════════╤════════════╕
    │"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}]                                      │                │            │
    └──────────────────────────────────────────────────────────────────────┴────────────────┴────────────┘