Я описал график здесь, на странице gremlify. Итак, у меня есть четыре типа вершин: Контент, Пользователь, Группа и Видео. Контент и Группа служат контейнером, Пользователь и Видео - листьями. Кроме того, у меня есть возможные границы между Group и User, Group и Content, Группа и Видео. Пользователь также может быть назначен непосредственно для Видео и Контента. Видео можно добавить в вершину Content. Мне нужно вычислить разницу в дереве, когда Content удаляется из Group. Я создал запрос, который проходит от Content, объединяет всех напрямую назначенных Users, а затем вычитает этих Users из Group набор членов:
g.V().has('ContentId', 1).in('Assigned').
choose(label()).
option('User', __.aggregate('DirectAssign')).
option('Group', __.out('Added').where(without('DirectAssign')).
as('ToDrop'))
.select('ToDrop')
Однако есть несколько недостатков:
- Сомневаюсь, что запрос оптимален с точки зрения масштаба и производительности, так как на 100к пользователей в группе он потребляет почти все мои RU
- Мне нужно рассчитать доступ к видео для каждого пользователя индивидуально (не беда)
- Я не могу написать этот запрос в добавленной структуре ORM, так как
aggregate
создает там новую область и невозможно сослаться на эту агрегированную коллекцию на шаге 2-го варианта.
Итак, мой вопрос: можно ли переписать этот запрос (оставить его единым) без шага choose
?