2016-01-28 3 views
4

У меня есть следующий супер-простой граф: picture of graphЧто лучший способ для фильтрации ребер графа по типу в ДУК

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

  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} 

ответ

2

Мы в настоящее время введения 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} 

Однако, лучшее решение в этом особом случае не использовать именованный интерфейс графа, но specify the list of edge collections that should be concerned by the traversal в первую очередь:

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} 
+0

Изумительного, спасибо так много! – IaMaCuP