【发布时间】:2016-02-25 23:29:12
【问题描述】:
我有一个简单的图表来跟踪我借钱给的人。 所以图表看起来像这样:
userB -- owes to (amount: 200) --> userA
userC -- owes to (amount: 150) --> userA
等等……
假设您需要使用图遍历找出每个用户欠了多少钱。你是如何实现的?
【问题讨论】:
我有一个简单的图表来跟踪我借钱给的人。 所以图表看起来像这样:
userB -- owes to (amount: 200) --> userA
userC -- owes to (amount: 150) --> userA
等等……
假设您需要使用图遍历找出每个用户欠了多少钱。你是如何实现的?
【问题讨论】:
让我用city example graph 解释一下
顶点(城市)有一个数字属性,population;边(高速公路)有一个数字属性distance。
检查我们期望总结的内容:
FOR v, e IN 1..1 INBOUND "frenchCity/Lyon" GRAPH "routeplanner"
RETURN {city: v, highway: e}
总结所有经过城市的人口很容易:
RETURN SUM(FOR v IN 1..1 INBOUND "frenchCity/Lyon" GRAPH "routeplanner"
RETURN v.population)
这里使用了子查询,即返回所有值,然后对它们执行SUM操作。
在遍历过程中最好使用COLLECT AGGREGATE来总结属性。
因此,虽然在城市人口及其距离的背景下,总结这些数字可能没有意义,但无论如何还是要这样做:
FOR v, e IN 1..1 INBOUND "frenchCity/Lyon" GRAPH "routeplanner"
COLLECT AGGREGATE populationSum = SUM(v.population), distanceSum = SUM(e.distance)
RETURN {population : populationSum, distances: distanceSum}
【讨论】: