Внутри графика есть группа G1 - эта группа G1 имеет 3 подгруппы S1, S2 и S3. Отношение классифицируется как IS_SUBGROUP_OF. G1 сам снова является подгруппой другой группы, назовем его D1. D1 имеет много подгрупп, где G1 - только один.График перемещения только на одном уровне
Наличие пользователя U1, являющегося членом подгруппы G1 - здесь S1. Я хочу создать запрос, который сможет собрать всех пользователей подгруппы S1, пройти от пользователя U1 до S1 и оттуда до G1, получить пользователей G1 и вниз от G1 до S2 и S3 и захватить всех пользователей из S2 и S3 также. Конечным результатом должны быть все пользователи в подгруппах S1, S2 и S3 из родительской группы G1, включая пользователей G1.
Я попытался:
MATCH (d:User) --> (S1:Subgroup)-[:IS_SUBGROUP_OF*0..]->(G1:Group)
WHERE d.name = "U1"
RETURN d
К сожалению, я пройти все группы и вернуть всем пользователям какой-либо группы в графе. Я попытался изменить уровень прыжка в отношении (например, только 1), но не смог. У вас есть подсказка, как создать запрос, чтобы получить только эту подгруппу пользователей?
Название групп только для примера и не известно в реальном мире - все, что я знаю, является именем пользователя (здесь: U1) - и оттуда мне нужно найти различные группы, зависящие от того, где находится пользователь. Поэтому в запросе я не могу работать с именами групп, но только с переменными, поскольку они неизвестны.
* EDITED *
Извините за сумбур, я labeld S1 неправильно как в Подгруппы, но только отношение упоминает «IS_SUBGROUP_OF», поэтому все узлы группы имеют метку «Group», D1 будет также иметь label 'Group'. Я также добавляю метку отношения для пользователей, поэтому утверждение выглядит следующим образом:
MATCH (d:User) -[:IS_MEMBER_OF]-> (S1:Group)-[:IS_SUBGROUP_OF*0..]->(G1:Group)
WHERE d.name = "U1"
RETURN d
S1, S2, S3 имеют метку 'Subgroup', G1 имеет' Group', а что же D1? И как называется связь между (под) группой и пользователем? Можете ли вы обновить этот вопрос? –
Я исправил и расширил запрос из своего вопроса. – Balael