Запросить общий граф ArangoDB для общих соседей с более чем двумя начальными вершинами?

Рассмотрим следующий пример графа:

Визуализация графика

  1. Учитывая вершины A, B и C (создатели), как определить их общих соседей?
    (проекты, в которых участвовали все 3)

    Для двух вершин я мог бы просто использовать GRAPH_COMMON_NEIGHBORS("myGraph", A, B), но что, если я хотите запросить 3 или более?

    Ожидаемый результат: 1 и 2.

  2. Учитывая те же вершины, как я могу заставить его возвращать общих соседей без других подключений?
    (создатели участвовали в проекте исключительно, дополнительные ребра не разрешены)?

    Ожидаемый результат: 1, потому что 2 имеют ребро, идущее из D, которое не является одной из начальных вершин.


person CodeManX    schedule 14.01.2015    source источник


Ответы (1)


Вы можете просто передать один и тот же набор вершин в качестве обоих параметров для общих соседей. Затем перепакуйте результат в лучший формат для AQL для вычисления пересечения:

let res = (
  let nodes =  ["a/A","a/B","a/C"]
  for n in GRAPH_COMMON_NEIGHBORS("g",nodes , nodes) 
    for f in VALUES(n)
      return VALUES(f)
)
return CALL("intersection", res[0])
person mchacki    schedule 15.01.2015