У меня есть граф в ArangoDB, корневой узел которого - «X». Теперь «a, b, c, d, e, f» являются братьями и сестрами прямых или великих братьев и сестер «X». Теперь из заданного узла-брата «a, b, c, d, e или f» я хочу перейти к узлу «X». Есть ли какой-либо общий запрос AQL для прямого перехода к корневому узлу любого графа?
Как получить ключ корневого узла графа в ArangoDB?
Ответы (3)
Чтобы привести точный пример, мне нужно знать немного больше, но это одно из нескольких решений.
Предполагая, что узлы соединены «дочерними» ребрами и направление ребер идет от родителя к потомку. Вы пройдете по дереву вверх или INBOUND
FOR v,e,p IN 1..50 INBOUND '(id of starting node a,b,etc.)' child RETURN p.vertices
Если вы знаете, сколько максимумов переходов до корня, измените 50 на это значение.
Этот оператор вернет все пути и промежуточные пути от начального узла через дочерние ссылки к головному узлу. Чтобы вернуть только путь к головному узлу, вам придется отфильтровать промежуточные пути. Это можно сделать с помощью проверки отсутствия родительской вершины.
FOR v,e,p IN 1..50 INBOUND '(id of starting node a,b,etc.)' child
FILTER LENGTH(EDGES(child,v._id,'inbound'))==0 RETURN p.vertices
который отфильтрует все пути, не заканчивающиеся в корневой вершине.
Ответ RHSMan помог мне, но здесь немного почистили
LET ref_people = (
FOR p IN people RETURN p._id
)
LET l = (
FOR id IN ref_people
FOR link IN links FILTER id == link._from RETURN id
)
RETURN MINUS(ref_people, l)
Я столкнулся с этим, так как у меня была такая же проблема, но приведенное выше устарело:
Я сделал следующее:
let ref_items = (for s in skills
return s._id)
let c = (for item in ref_skills
for sk in skill_skill
filter item == sk._to
return item)
return MINUS(ref_skills, c)