Как лучше всего получить все вершины, у которых нет ребра в связанной коллекции edge_collection
Я пытался использовать следующий код, но он стал невероятно медленным, начиная с arangodb 2.8 (он был не очень быстрым в предыдущих версиях, но примерно в 10 раз быстрее, чем сейчас). Для размеров коллекции около 1000 ребер и около 3000 вершин требуется более 30 секунд.
FOR v IN vertex_collection
FILTER LENGTH( EDGES(edge_collection, v._id, "outbound"))==0
RETURN v._id
...
Обновить
...
Немного поигравшись, я пришел к следующему запросу
LET vIDs = (FOR v IN vertex_collection
RETURN v._id)
LET vEdgesFrom = (FOR e IN edge_collection
FILTER e._from IN vIDs
RETURN e._from)
FOR v IN vertex_collection
FILTER v._id IN MINUS(vIDs, vEdgesFrom)
RETURN v._id
Этот намного быстрее (около 0,05 с), но по-прежнему выглядит как некоторая работа (просто подумайте о нескольких коллекциях краев, которые нам нужно запросить).
Поэтому я все еще ищу лучший способ найти вершины, не имеющие ребер, в определенных коллекциях ребер.