通过与AQL嵌套阵列迭代

问题描述 投票:0回答:1

这里是我的AQL查询给我的途径,以特定的顶点:

FOR v, e, p IN 1..2 OUTBOUND @startVertex GRAPH 'courses'
    FILTER v._id == @target
    RETURN p.vertices

并返回这样的事情

[
  [
    {
      "_key": "ADELPHI+UNIVERSITY==BIO+111",
      "_id": "courses/ADELPHI+UNIVERSITY==BIO+111"
    },
    {
      "_key": "BOSTON+UNIVERSITY==CAS+BI+108",
      "_id": "courses/BOSTON+UNIVERSITY==CAS+BI+108"
    }
  ],
  [
    {
      "_key": "ADELPHI+UNIVERSITY==BIO+111",
      "_id": "courses/ADELPHI+UNIVERSITY==BIO+111"
    },
    {
      "_key": "UNIVERSITY+OF+NEVADA-LAS+VEGAS==BIOL+196",
      "_id": "courses/UNIVERSITY+OF+NEVADA-LAS+VEGAS==BIOL+196"
    },
    {
      "_key": "BOSTON+UNIVERSITY==CAS+BI+108",
      "_id": "courses/BOSTON+UNIVERSITY==CAS+BI+108"
    }
  ]
]

当我使用FOR操作,并尝试通过p.verticesp.vertices[*]迭代,它总是变平的阵列。基本上我想通过每一个数组并返回东西每个。

就这样Python代码:

lists = [[], [], []]
for l in lists:
    do_something_with_list(l)
arangodb aql
1个回答
2
投票

选择1:你可以用一个AQL variables(嵌套FOR)像下面更新的样本中一起使用subquery

FOR v, e, p IN 1..2 OUTBOUND @startVertex GRAPH 'courses'
    FILTER v._id == @target

LET updatedVertices = (
    FOR v in p.vertices
    // here you can change the value of v as you want
    // in my sample here I convert a v object to a 
    // string representing it's _id
    RETURN v._id 
)

RETURN updatedVertices

选项2:如果您有对象转换(即,如果从您的样品do_something_with_list不是那么简单,不能用普通AQL完成)一个复杂的逻辑,你也可以使用User Function。你必须注册用户的功能的第一步,让我们称之为DO_SOMETHING_WITH_LIST。然后,当你想使用它你的AQL看起来像:

FOR v, e, p IN 1..2 OUTBOUND @startVertex GRAPH 'courses'
    FILTER v._id == @target

LET updatedVertices = DO_SOMETHING_WITH_LIST(p.vertices)

RETURN updatedVertices

请注意,上面的用户函数必须接受和数组,并返回一个数组。

© www.soinside.com 2019 - 2024. All rights reserved.