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);
您想要的解决方案
// |----------- 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}] │ │ │
└──────────────────────────────────────────────────────────────────────┴────────────────┴────────────┘