Cypher -Neo4j Установить значение атрибута узла в путях переменной длины

Я новичок в neo4j, у меня следующая ситуация

match (c:customer{id:'12345'})-[r:buys]->(b:item)
with b,b.total as z
match (b)-[same:*1..z)]->(d)
return d

В приведенном выше запросе z является целым числом, но приведенный выше запрос не работает,

Буду признателен за все помощь и предложения, заранее спасибо

1 ответ

Вы не можете использовать переменную для длины пути. Обходной путь для этого будет:

match (c:customer{id:'12345'})-[r:buys]->(b:item)
with b,b.total as z
match p=(b)-[same:*1..9999)]->(d)
where length(p)=z 
return d

Замените 9999 своего рода глобальным верхним пределом, подходящим для вашего варианта использования. Имейте в виду, это может быть довольно неэффективно. В этом случае может быть лучше отправить 2 оператора Cypher:

match (c:customer{id:'12345'})-[r:buys]->(b:item) return id(b), b.total as z

Для второго запроса введите значение z с помощью конкатенации строк:

match (b)-[same:*1..<z>)]->(d) return d
Другие вопросы по тегам