【问题标题】:Create edge from attribute with ArangoDB AQL使用 ArangoDB AQL 从属性创建边
【发布时间】:2017-03-29 07:22:32
【问题描述】:

我已经导入了一个文档列表(在一个名为“程序集”的集合中)。属性之一是“parent_id”。 在此基础上,我想构造这个属性隐式描述的图形。

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

这是查询,我希望给我创建边缘集合的信息(命名为“包含”,所以它是从父到子):

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}

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

【问题讨论】:

    标签: arangodb aql


    【解决方案1】:

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

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

    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 是可选的。您可以通过它检查导入是否成功。如果数据量更大,我会放弃它。

    【讨论】:

    • 谢谢,这行得通。原来,由于编码问题,“id”字段前面有两个不可见的字符。将 csv 文件转换为基本的 UTF-8 后,它就可以工作了。当我将集合导出到 json 时,我发现了这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多