Есть ли способ сделать следующее?
MATCH (main {Identifier: "Main"})
UNWIND
[(main)-[:MULTI_JUMP_PATH1]->(n1)-[rel1:REL]->(end1) | n1] +
[(main)-[:MULTI_JUMP_PATH2]->(n2)-[rel2:REL]->(end2) | n2] AS node
UNWIND
[(main)-[:MULTI_JUMP_PATH1]->(n1)-[rel1:REL]->(end1) | end1] +
[(main)-[:MULTI_JUMP_PATH2]->(n2)-[rel2:REL]->(end2) | end2] AS end
UNWIND
[(main)-[:MULTI_JUMP_PATH1]->(n1)-[rel1:REL]->(end1) | rel1] +
[(main)-[:MULTI_JUMP_PATH2]->(n2)-[rel2:REL]->(end2) | rel2] AS rel
RETURN DISTINCT main, node, end, rel
По сути, я ищу более прямой способ начать с основного и получить эквивалент:
(node=n1+n2)-[rel=rel1+rel2:REL]->(end=end1+end2)
безпотерять главное. В конечном итоге я хочу запустить результаты:
FOREACH (o IN CASE WHEN end IS NULL THEN [rel] ELSE [] END | SET main.property=rel.property*n.property)
Сейчас я выполняю несколько запросов подряд и проверяю результаты между всеми запросами, но, похоже, будет более эффективный способ сделать это. все в цифре.
Кроме того, я не могу заставить UNWIND прекратить терять идентификаторы, когда список понимания равен нулю.
Например:
CASE
WHEN [(main)-[:MULTI_JUMP_PATH1]->(n1)-[rel1:REL]->(end1) | n1] +
[(main)-[:MULTI_JUMP_PATH2]->(n2)-[rel2:REL]->(end2) | n2] = []
THEN []
ELSE
[(main)-[:MULTI_JUMP_PATH1]->(n1)-[rel1:REL]->(end1) | n1] +
[(main)-[:MULTI_JUMP_PATH2]->(n2)-[rel2:REL]->(end2) | n2]
END AS n
неизменно выдает ошибку "Neo.DatabaseError.Statement.ExecutionFailed: выражения должны быть зарегистрированы в его собственном Pipe, поэтому профилирование знает, куда сообщать о db-попаданиях». Я также пытался с = null / null и = [null] / [null] одна и та же ошибка каждый раз. Я не получаю ту же ошибку, если выполняю необязательное сопоставление со сборками, но я заметил, что необязательные сопоставления с длинными путями делают странные вещи, даже если они всегда начинаются со связанного узла (иногда я получаю ошибки, связанные с отсутствующими узлами, которые я чувствуюЯ не должен получать, поскольку это необязательные совпадения - но это другой пост).