2015-02-24 35 views
1

我有一個春天的Neo4j庫法getAvgVotesWeightForCriterionMove方法的代碼的Neo4j的Cypher查詢

@Query("MATCH (d:Decision)<-[:VOTED_FOR]-(v:Vote)-[:VOTED_ON]->(c:Criterion) WHERE id(d) = {0} AND id(c) = {1} RETURN avg(v.weight)") 
double getAvgVotesWeightForCriterion(Decision decision, Criterion criterion); 

,也是我有calculateWeight完全用Java編寫的另一種方法。這種方法在內部循環使用getAvgVotesWeightForCriterion

public double calculateWeight(Decision decision, List<Criterion> criteria) { 
    double weight = 0; 

    for (Criterion criterion : criteria) { 
     weight += getAvgVotesWeightForCriterion(decision, criterion); 
    } 

    return weight; 
} 

是否有可能完全移動邏輯裏面calculateWeight方法的Cypher查詢?爲了得到這樣的東西:

@Query .... 
double calculateWeight(Decision decision, List<Criterion> criteria) 

回答

3

這應該做你想做的事情。

您將每個標準的平均聚合分組,然後對權重進行求和。

MATCH (d:Decision)<-[:VOTED_FOR]-(v:Vote)-[:VOTED_ON]->(c:Criterion) 
WHERE id(d) = {0} AND id(c) IN {1} 
WITH c, avg(v.weight) as weight 
RETURN sum(weight) 
+0

工作就像一個魅力,非常感謝你! – alexanoid 2015-02-25 09:50:25