#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.