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
如有错误请指正
我有一个 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
如有错误请指正