Я выполняю запрос, который выглядит как
MATCH p = (n:NODEA)-[:RELA]->(s:NODEB)-[:RELB*]->(j:NODEB)
WITH *, relationships(p) AS re
RETURN *
Я хочу отфильтровать график, чтобы удалить все случаи, когда RELB
(ребро между двумя NODEB
с) не имеет определенного свойства перед возвратом.
Запрос работает, если я связываю связь с использованием [rels:RELB*]
и фильтрую на rels
, однако я получаю сообщение о том, что эта функция устарела и вместо нее используется WITH *, relationships(p)
. Конкретное сообщение
Эта функция устарела и будет удалена в следующих версиях.
Связывание связей со списком в шаблоне переменной длины не рекомендуется. (Привязка шаблона отношения переменной длины к переменной ('rels') устарела и не будет поддерживаться в будущей версии. Рекомендуемый способ - привязать весь путь к переменной, а затем извлечь отношения: MATCH p = (.. .) - [...] - (...) С *, отношения (p) AS rels *
Я пробовал
MATCH p = (n:NODEA)-[:RELA]->(s:NODEB)-[:RELB*]->(j:NODEB)
WITH *, relationships(p) AS re
WHERE ANY (thing IN re WHERE thing.prop = 'value')
RETURN *
Но, похоже, все равно возвращается все то же, что и в первом запросе
Я также пытался понять списки, чтобы отфильтровать отношения
MATCH p = (n:NODEA)-[:RELA]->(s:NODEB)-[:RELB*]->(j:NODEB)
WITH *, [re in relationships(p) WHERE re.prop = 'value'] AS re
RETURN *
Но я считаю, что у этого подхода есть несколько проблем:
- взаимосвязи (p) представляются массивом массивов из-за характера графика
- существует несколько типов отношений в отношениях (p) (
RELA
s и RELB
s), и я не уверен, как принять это во внимание
Я не могу найти в сети документацию о том, как фильтровать отношения, когда они возвращаются в виде списка (из-за *
в [:RELB*]
)
Следует также отметить, что свойство, которое мне нужно отфильтровать RELB
, является массивом, и я проверю, содержит ли оно какое-либо значение, поэтому у меня нет возможности использовать что-то вроде [:RELB*{prop: 'value'}]
в запросе. (Я просто не включил это выше, чтобы не усложнять вопрос)
Любая помощь приветствуется.