Имам следната част от заявката за Cypher:
MATCH (ch:Characteristic) WHERE id(ch) = {characteristicId} WITH ch OPTIONAL MATCH (ch)<-[:SET_ON]-(v:Value)...
първо търся (ch:Characteristic)
от characteristicId
и след това прилагам необходимата логика за тази променлива в останалата част от моята заявка.
моят Characteristic
също може да има (или не) дъщерни Characteristic
възли, като:
(ch:Characteristic)-[:CONTAINS]->(childCh)
Моля, помогнете ми да разширя заявката си, за да събера ch
и childCh
в списък от Characteristic
, така че ще мога в останалата част от заявката си да приложа необходимата логика към всички Characteristic
в този списък.
АКТУАЛИЗИРАНО - възможно решение №2
Това е текущата ми работна заявка:
MATCH (chparent:Characteristic)
WHERE id(chparent) = {characteristicId}
OPTIONAL MATCH (chparent)-[:CONTAINS*]->(chchild:Characteristic)
WITH chparent, collect(distinct(chchild)) as childs
WITH childs + chparent as nodes
UNWIND nodes as ch
OPTIONAL MATCH (ch)<-[:SET_ON]-(v:Value)-[:SET_FOR]->(Decision)
OPTIONAL MATCH (v)-[:CONTAINS]->(vE) OPTIONAL MATCH (vE)-[:CONTAINS]->(vEE)
OPTIONAL MATCH (ch)-[:CONTAINS]->(cho:CharacteristicOption)
OPTIONAL MATCH (cho)-[:CONTAINS]->(choE) OPTIONAL MATCH (ch)-[:CONTAINS]->(chE)
DETACH DELETE choE, cho, ch, vEE, vE, v, chE
Това е опит за опростяване на заявката по-горе:
MATCH (ch:Characteristic)
WHERE (:Characteristic {id: {characteristicId}})-[:CONTAINS*]->(ch)
OPTIONAL MATCH (ch)<-[:SET_ON]-(v:Value)-[:SET_FOR]->(Decision)
OPTIONAL MATCH (v)-[:CONTAINS]->(vE)
OPTIONAL MATCH (vE)-[:CONTAINS]->(vEE)
OPTIONAL MATCH (ch)-[:CONTAINS]->(cho:CharacteristicOption)
OPTIONAL MATCH (cho)-[:CONTAINS]->(choE)
OPTIONAL MATCH (ch)-[:CONTAINS]->(chE)
DETACH DELETE choE, cho, ch, vEE, vE, v, chE
но тази заявка не изтрива необходимите възли на Характеристика и моите тестове се провалят. Какво правя погрешно при последното запитване?
collect
и сега трябва даUNWIND
списъка, който е като.map
в JS, или като forEach, където правите няколко оптимални съвпадения за всеки възел в списъка (колекцията). - person Tomaž Bratanič   schedule 21.05.2017id
, но това не е същото като вътрешния neo4j id в работната заявка. Трябва да използвате функциятаid()
, за да получите или сравните вътрешните идентификатори на neo4j. - person InverseFalcon   schedule 22.05.2017MATCH (chparent)-[:CONTAINS*0..]->(ch:Characteristic) WHERE id(chparent) = {characteristicId}
и тя се проваля с грешка, която показах като коментар към вашия отговор -Caused by: org.neo4j.kernel.api.exceptions.EntityNotFoundException: Unable to load NODE with id 827.
:( - person alexanoid   schedule 22.05.2017