У меня есть база данных графов, которая моделирует метаданные для сообщений и поля, которые могут содержаться в этих сообщениях. Некоторые из этих полей могут быть «группами», которые являются группами других полей. Я пытаюсь спросить Нео, «какие сообщения используют эту группу?». Ниже приведен список типов путей, которые могут быть использованы, чтобы получить из сообщения в группу:Запрос рекурсивных цепочек отношений в Neo4j с Cypher
message-[:INLINE]->group (the fields of a group are used inline on a message)
message-[:FIELDREF]->(fref)-[:FIELD]->(field)-[:DATATYPE]->group (the group is used as a data type by a field on the message)
второй цепью является рекурсивной. Другими словами, сегмент - [: FIELDREF] -> (fref) - [: FIELD] -> (field) - [: DATATYPE] - (group) может повторяться снова и снова, прежде чем, наконец, дойдем до интересующей меня группы in.
Итак, что я хочу знать, как я могу попросить повторить цепочку отношений, а не просто несколько (например, * после имени отношения) для каждого отдельного элемента пути?
Чтобы вернуться в группу, вы можете либо перейти к группе из сообщения, пройдя связь [: INLINE], которая затем может следовать за n целыми целями «fieldref-field-datatype-group». ИЛИ вы можете добраться до группу из сообщения путем прохождения n числа цепей «fieldref-field-datatype-group».
START group=node({sourceGroupId})
... ? ? ? ...
Так что я хочу что-то вроде: -> 0..n из (FieldRef-полевой тип данных-групп) цепей [INLINE?].
Любые мысли?
Да, я знал о звездочке. Я на самом деле пытался быть слишком сложным и описывал точную форму, когда я мог просто сказать Neo, что я хочу «любой путь, какой бы то ни было длины, из сообщения в группу», например: msg - [?: INLINE | FieldRef | ПОЛЕ | DATATYPE *] -> п –