什么是在AQL中按类型过滤图形边缘的最佳方法

时间:2016-01-28 19:37:03

标签: arangodb aql

我有以下超简单图:picture of graph

我想做的是:

  1. 选择问题文档中名为firstQuestion且属性为true的所有问题。
  2. 通过类型为with_options
  3. 的出站边缘选择与问题相关联的所有选项

    以下查询有效,但感觉必须有一种更好的方法来检查边缘类型而不使用字符串操作 - 特别是用于通过将边缘类型连接到具有边缘类型的键来重新创建边缘_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 个答案:

答案 0 :(得分:2)

我们目前正在使用ArangoDB 2.8.1为此特定目的引入IS_SAME_COLLECTION。 在这种情况下,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}