Neo4j Cypher 使用复杂的嵌套 QueryResult 查询 SDN 4

Neo4j Cypher query SDN 4 with a complex nested QueryResult

我有一个 Cypher query/Spring Data Neo4j 4,它 return 是一个标准列表,其平均权重已添加到这些 Criterion 上,用于特定 childDecisionId .

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);

这是WeightedCriterion QueryResult:

@QueryResult
public class WeightedCriterion {

    private Criterion criterion;

    private Double weight;

}

我需要更改此查询,以便 return 列表 Criterion 及其平均权重,不仅针对单个 child 决定,而且针对所有 child parent parentDecisionId.. 的决定,换句话说,这个查询应该 return 像这样:

List<DecisionWeightedCriterion>

其中 DecisionWeightedCriterion 看起来像例如:

@QueryResult
public class DecisionWeightedCriterion {

    private Decision decision;

    private List<WeightedCriterion> weightedCriteria;

}

有可能吗?如果有的话,你能帮忙解决这个 Cypher 查询吗?

我通过以下方式实现了这个查询:

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

如有错误请指正