I have a following Neo4j Cypher query:
MATCH (parentD:Decision)-[:CONTAINS]->(childD:Decision)
WHERE id(parentD) = {parentDecisionId}
WITH childD, parentD
OPTIONAL MATCH (parentD)<-[:DEFINED_BY]-(c:Criterion)<-[:VOTED_ON]-(vg:VoteGroup)-[:VOTED_FOR]->(childD)
OPTIONAL MATCH (parentD)<-[:DEFINED_BY]-(ch:Characteristic)<-[:SET_ON]-(v:Value)-[:SET_FOR]->(childD)
WITH childD, {criterion: c, weight: vg.avgVotesWeight} AS weightedCriterion, {characteristic: ch, value: v.value} AS valuedCharacteristic
RETURN childD AS decision, collect(weightedCriterion) AS weightedCriteria, collect(valuedCharacteristic) AS valuedCharacteristics
As a result in my SDN 4 project I expect to retrive a List<DecisionMatrix>
@QueryResult
public class DecisionMatrix {
private Decision decision;
private List<WeightedCriterion> weightedCriteria;
private List<ValuedCharacteristic> valuedCharacteristics;
}
@QueryResult
public class WeightedCriterion {
private Criterion criterion;
private Double weight;
}
@QueryResult
public class ValuedCharacteristic {
private Characteristic characteristic;
private Object value;
}
Right now this query returns a correct list of criterion but a wrong list with an empty elements of characteristic.
For example I do not have any characteristic that match this query condition but in a result I can see a following structure with a two records:
RDBMS : [{criterion=Node[161], weight=4.333333333333333}, {criterion=Node[160], weight=2.1666666666666665}] : [{characteristic=null, value=null}, {characteristic=null, value=null}]
NoSQL : [{criterion=Node[160], weight=4.333333333333333}, {criterion=Node[161], weight=2.5}, {criterion=Node[162], weight=4.2}] : [{characteristic=null, value=null}, {characteristic=null, value=null}, {characteristic=null, value=null}]
The result contains a correct set of criteria for RDBMS
(2 criteria) and for NoSQL
(3 criteria) but a wrong set of characteristics. I expect to have an empty lists(0 elements) of characteristics for both of these records(there are no associated characteristics for these nodes).. but in first record I have 2 empty characteristics (the same list length as and criteria) and 3 empty characteristics for the second record.
What am I doing wrong and how to fix it ?