Каков наилучший способ фильтрации ребер графа по типу в AQL
У меня есть следующий супер-простой график:
То, что я пытаюсь сделать, это:
- Выберите все вопросы, для которых в документе с вопросом есть свойство firstQuestion со значением true.
- Выберите любые варианты, которые связаны с вопросом через исходящий край типа 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}