У меня есть следующий Neo4j Cypher запрос:Neo4j Cypher множественным С ключевыми словами
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
В результате в моем проекте SDN 4 я ожидаю retrive 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;
}
Сейчас этот запрос возвращает правильный список критериев, но неправильный список с пустыми элементами характеристики.
Например, у меня нет никаких характеристик, которые соответствуют этому условию запроса, но в результате я могу увидеть следующую структуру с двумя записями:
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}]
результат содержит правильный набор критериев для RDBMS
(2) и для NoSQL
(3 критерия), но неправильный набор характеристик. Я ожидаю наличия пустых списков (0 элементов) характеристик для обеих этих записей (для этих узлов нет связанных характеристик). Но в первой записи у меня есть две пустые характеристики (такая же длина списка и критерии) и 3 пустые характеристики для второй записи.
Что я делаю неправильно и как это исправить?
Спасибо! Это именно то, что мне нужно. Я использую Neo4j 3.1 – alexanoid