Каков наилучший способ фильтрации ребер графа по типу в AQL

У меня есть следующий супер-простой график: изображение графика

То, что я пытаюсь сделать, это:

  1. Выберите все вопросы, для которых в документе с вопросом есть свойство firstQuestion со значением true.
  2. Выберите любые варианты, которые связаны с вопросом через исходящий край типа with_options

Следующий запрос работает, однако кажется, что должен быть лучший способ проверки типа ребра без использования строковых операций - в частности, операция конкатенации, которую я использую для воссоздания значения edge _id путем соединения его с ключом с желаемым типом ребра - это лучший способ проверить тип кромки?

FOR question IN questions 
FILTER question.firstQuestion == true
    let options = 
        (FOR v, e IN 1..1 OUTBOUND question._id GRAPH 'mygraph'
        FILTER CONCAT('with_options/', e._key) == e._id
        RETURN v)
RETURN {question: question, options: options}

1 ответ

Решение

В настоящее время мы представляем IS_SAME_COLLECTION для этой конкретной цели с ArangoDB 2.8.1. Функцию DOCUMENT также стоит упомянуть в этом контексте.

FOR question IN questions 
  FILTER question.firstQuestion == true
  LET options = (FOR v, e IN 1..1 OUTBOUND question._id GRAPH 'mygraph'
                   FILTER IS_SAME_COLLECTION('with_options', e._id)
                     RETURN v)
  RETURN {question: question, options: options}

Однако лучшее решение в этом особом случае - не использовать именованный интерфейс графа, а указать список коллекций ребер, которые в первую очередь должны быть затронуты обходом:

FOR question IN questions 
  FILTER question.firstQuestion == true
  LET options = (FOR v, e IN 1..1 OUTBOUND question._id with_options RETURN v)
  RETURN {question: question, options: options}
Другие вопросы по тегам