代码之家  ›  专栏  ›  技术社区  ›  camba1

在arangodb insert中使用collect创建新文档

  •  0
  • camba1  · 技术社区  · 6 年前

    我有一个名为prodSampleNew的集合,其中的文档在arangodb中具有层次结构级别作为字段:

     { 
        prodId: 1,   
        LevelOne: "clothes", 
        LevelTwo: "pants", 
        LevelThree: "jeans",
        ... etc.... 
    }
    

    我想把层次结构级别转换成它们自己的文档,这样我最终可以用层次结构构建一个合适的图。

    我能够通过以下方法提取层次结构的第一级并将其放入新集合:

    for i IN [1]
    let HierarchyList = (   
       For prod in prodSampleNew
        COLLECT LevelOneUnique = prod.LevelOne
        RETURN LevelOneUnique
    )
    FOR hierarchyLevel in HierarchyList
        INSERT {"name":  hierarchyLevel}
        IN tmp
    

    然而,必须在[1]的顶端加上一个for I似乎是错误的,应该有更好的方法

    1 回复  |  直到 6 年前
        1
  •  1
  •   stj    6 年前

    不确定你到底想达到什么目的。 这个 FOR i IN [1] 但是似乎没有必要,因此可以直接用子查询启动AQL查询,以计算层次结构级别1中的不同值:

    LET HierarchyList = (   
      FOR prod IN prodSampleNew
      COLLECT LevelOneUnique = prod.LevelOne
      RETURN LevelOneUnique
    )
    FOR hierarchyLevel IN HierarchyList
      INSERT {"name":  hierarchyLevel} IN tmp
    

    如果问题更像“如何从所有层次结构中获得所有不同级别的名称”,那么您可以使用

    LET HierarchyList = UNIQUE(FLATTEN(
      FOR prod IN prodSampleNew 
        RETURN [ prod.LevelOne, prod.LevelTwo, prod.LevelThree ]
    ))
    ...
    

    使用级别1-3的层次结构级别的唯一名称生成数组。

    这不应该回答你的问题,请描述查询应该产生的预期结果。