2017-02-08 2 views
2

У меня есть следующий запрос Cypher/Spring Data Neo4j 4, который возвращает список Критерий со своим средним весом, который был добавлен на этих Criterion для определенного childDecisionId.Neo4j Cypher query SDN 4 со сложным вложенным QueryResult

MATCH (parentD:Decision)-[:CONTAINS]->(childD:Decision) 
WHERE id(childD) = {childDecisionId} AND id(parentD) = {parentDecisionId} 
WITH childD, parentD MATCH (parentD)<-[:DEFINED_BY]-(c:Criterion)<-[:VOTED_ON]-(vg:VoteGroup)-[:VOTED_FOR]->(childD) 
RETURN c AS criterion, vg.avgVotesWeight AS weight 

@Query("MATCH (parentD:Decision)-[:CONTAINS]->(childD:Decision) WHERE id(childD) = {childDecisionId} AND id(parentD) = {parentDecisionId} WITH childD, parentD MATCH (parentD)<-[:DEFINED_BY]-(c:Criterion)<-[:VOTED_ON]-(vg:VoteGroup)-[:VOTED_FOR]->(childD) RETURN c AS criterion, vg.avgVotesWeight AS weight") 
List<WeightedCriterion> getCriteriaWithAvgVotesWeightForChildDecision(@Param("childDecisionId") Long childDecisionId, @Param("parentDecisionId") Long parentDecisionId); 

Это WeightedCriterionQueryResult:

@QueryResult 
public class WeightedCriterion { 

    private Criterion criterion; 

    private Double weight; 

} 

мне нужно изменить этот запрос, чтобы вернуть список Criterion с их средним весом не только для одного решения ребенка, но и для всех детей решений родитель parentDecisionId .. другими словами этот запрос должен возвращать что-то вроде этого:

List<DecisionWeightedCriterion> 

где DecisionWeightedCriterion выглядит, например:

@QueryResult 
public class DecisionWeightedCriterion { 

    private Decision decision; 

    private List<WeightedCriterion> weightedCriteria; 

} 

Можно ли и если да, то не могли бы вы помочь с этим Cypher запрос?

ответ

0

Я выполнил этот запрос в следующим образом:

MATCH (parentD:Decision)-[:CONTAINS]->(childD:Decision) 
WHERE id(parentD) = {parentDecisionId} 
WITH childD, parentD MATCH (parentD)<-[:DEFINED_BY]-(c:Criterion)<-[:VOTED_ON]-(vg:VoteGroup)-[:VOTED_FOR]->(childD) WITH childD, {criterion: c, weight: vg.avgVotesWeight} AS weightedCriterion 
RETURN childD AS decision, collect(weightedCriterion) as weightedCriteria 

Пожалуйста, поправьте меня, если я ошибаюсь.

Смежные вопросы