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

using collect in arangodb insert to create new documents

我有一个名为 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

但是,必须在顶部放置 for I IN [1] 似乎是错误的,应该有更好的方法。(是的,我对 AQL 还很陌生)

如能提供更好的方法,我们将不胜感激

不确定您要实现的目标。 然而,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

结果应该是一样的。

如果问题更像 "how can I get all distinct names of levels from all hierarchies",那么您可以使用

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

生成一个数组,其中包含级别 1-3 的层次结构级别的唯一名称。

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