使用ArangoDB AQL从属性创建边

时间:2017-03-29 07:22:33

标签: arangodb aql

我导入了一个文档列表(在名为“assemblies”的集合中)。其中一个属性是“parent_id”。 基于此,我想构建图形,该图形由该属性隐式描述。

"id","name","parent_id"
"30","Top level"
"30.1","30.1 Child 1","30"
"30.2","30.2 Child 2","30"

这是查询,我希望能够为我提供创建边集合的信息(名为“contains”,因此它是从父级到子级):

FOR assy IN assemblies
  LET parent = (
    FOR parent IN assemblies
      FILTER parent.id == assy.parent_id
      RETURN parent
  )
  RETURN {_from: parent._key, _to: assy._key}

我做错了什么?你能给我一个插入边缘的完整查询吗?

1 个答案:

答案 0 :(得分:2)

问题是parent中子查询的结果是数组而不是文档。但实际上并不需要子查询。您还可以执行join,它应该提供更好的性能并且更易于阅读。 对于边缘的_id_key字段,您还必须使用_from代替_to的值。

以下查询完全符合您的要求。

FOR assy IN assemblies
  FOR parent IN assemblies
    FILTER parent.id == assy.parent_id
    INSERT {_from: parent._id, _to: assy._id} IN contains
    RETURN NEW

节点RETURN NEW是可选的。您可以检查导入是否成功。有了更多的数据,我就放弃了。