Шифровальный запрос для получения пути между удаленными узлами

#neo4j #cypher

#neo4j #шифровальный

Вопрос:

Я довольно новичок в neo4j / cypher, и мне нужна ваша помощь с запросом.

С помощью этого оператора cypher: Match p=(a:Value_Node {katalog_name:"id"})-[r:RELATED_TO_*]->(b:Value_Node {katalog_name:"Gewicht"}) return p я получаю эту картинку ниже.

Но я хочу запросить только путь к тому value , который также указан в свойствах ( id_nr ) отношения RELATED_TO_ . Итак, я ищу путь к одному идентификатору от начального узла (a:Value_Node {katalog_name:"id"}) до конечного узла (b:Value_Node {katalog_name:"Gewicht"} . С помощью этого запроса: Match p=(a:Value_Node {katalog_name:"id"})-[r:RELATED_TO_*]->(b:Value_Node {katalog_name:"Gewicht"}) WHERE (a.value = r.id_nr) return p я получаю сообщение об ошибке:

Neo.Ошибка ClientError.Инструкция.Несоответствие типа синтаксической ошибки: ожидаемая карта, узел, Связь, Точка, длительность, Дата, время, LocalTime, LocalDateTime или DateTime, но был список (строка 1, столбец 117 (смещение: 116)) «Совпадение p=(a:Value_Node {имя_каталога:»id»})-[r:RELATED_TO_*]->(b:Value_Node {имя_каталога:»Gewicht»}) ГДЕ (a.value=r.id_nr) возвращает p» `

введите описание изображения здесь

Любая помощь полезна! Большое спасибо!

Ответ №1:

Когда вы ищете все отношения любой длины (r:RELATED_TO_*), значение r представляет собой список всех отношений от value_node с именем «id» до value_node с именем «Gewicht». Таким образом, вы должны выполнить итерацию по этому списку и проверить, равно ли значение a.value ВСЕМ элементам в r.

 Match p=(a:Value_Node {katalog_name:"id"})-[r:RELATED_TO_*]->(b:Value_Node {katalog_name:"Gewicht"}) 
WHERE ALL(rel in r WHERE rel.id_nr = a.value)
return p
 

Комментарии:

1. Идеально! Большое спасибо! Где я могу найти такую информацию о типе возвращаемого значения таких операторов или функций? О, я вижу, это написано в сообщении об ошибке. Но есть ли другой источник?

2. Да, вы можете проверить тип данных, вернув значение r, или вы можете использовать функцию apoc.