在 AQL 中按类型过滤图形边缘的最佳方法是什么
Whats the best method to to filter graph edges by type in AQL
我有以下超级简单的图表:
我想做的是:
- Select 在名为 firstQuestion 的问题文档中有 属性 且值为 true 的所有问题。
- Select 通过 with_options
类型的出站边缘连接到问题的任何选项
以下查询有效,但感觉必须有更好的方法来检查边缘类型而不使用字符串操作 - 特别是我用来重新创建边缘 _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}
我们目前正在为 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}
我有以下超级简单的图表:
我想做的是:
- Select 在名为 firstQuestion 的问题文档中有 属性 且值为 true 的所有问题。
- Select 通过 with_options 类型的出站边缘连接到问题的任何选项
以下查询有效,但感觉必须有更好的方法来检查边缘类型而不使用字符串操作 - 特别是我用来重新创建边缘 _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}
我们目前正在为 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}