2017-02-08 219 views
2

我有一个以下Cypher查询/春季数据Neo4j 4返回一个标准列表与他们的平均重量,这些Criterion为特定childDecisionId添加。Neo4j Cypher查询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; 

} 

是否可能,如果是这样,请你用这个暗号查询帮助吗?

回答

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 

请纠正我,如果我错了。