У меня есть загрузка пользователей и фотографий с тремя возможными связями между ними (с потенциально более добавленными позже). Эти отношения: POSTED_BY
, APPEARS_IN
и MENTIONED_IN
. Для конкретного пользователя я хочу получить запрос, который возвращает свою сеть до n
. Например, это должно включать фотографии, которые они опубликовали, фотографии, которые они отображают или упоминаются в них, а также учетные записи, на которых были размещены эти фотографии.Ограничение по каждому узлу, а не целому запросу
Мой запрос на данный момент:
MATCH (root:account { username: {username} })-[r*1..4]-(u)
RETURN *
LIMIT 50
Проблема с этим состоит в том, что предел делается на основе общих строк. Это приводит только к возврату одного узла уровня 1, когда у него много подносов. Вот более наглядное объяснение проблемы.
Это то, что она может выглядеть с обычным пользователем (упрощенный):
Если первый узел найден имеет много фотографий, это то, что получает возвращается:
Поскольку у пользователя много мультимедиа, он достигает предела, не показывая точное представление своей сети. Вместо этого я бы хотел, чтобы мой запрос ограничивал каждый узел максимум до n
подносов.
Из нескольких ответов, которые я прочитал здесь, похоже, что это должно быть возможно с COLLECT
, однако я не могу найти ни одного примера.
Это проблема рекурсии, которая в настоящее время отсутствует в cypher. И я думаю, что эта проблема не может быть решена с помощью одного cypher-запроса, если цель - эффективность (скорость и ресурсы). –
Несомненно, должен быть способ ограничить количество узлов, возвращаемых в каждом «прыжке», а не на весь запрос? –