Warm tip: This article is reproduced from serverfault.com, please click

javascript-带有边阵列的Gremlin价值图

(javascript - Gremlin Value Map With Array of Edges)

发布于 2020-11-30 17:59:45

我正在尝试使用Node Gremlin和AWS Neptune查询一个顶点以获取其属性,并通过“出”边将所有顶点及其所有属性以及单个属性输出到单个输出中。例如,如果我有一个“贝克”顶点,其边缘“烘焙”到两个“蛋糕”顶点,我想获得一个“贝克”对象,其所有属性以及两个“蛋糕”的数组顶点作为具有所有属性的对象。

我知道我可以使用.project有效地做到这一点,但是我不想为任何顶点选择特定的属性,因为我想要它们的所有属性。

我目前正在使用这样的查询:g.V(BakerId).as('Baker').out('bakes').as('Cake').select('Baker','Cake').by(valueMap(true)),但是这个问题是该查询为我提供了两个输出的列表,一个带有Baker和第一个Cake,另一个带有相同的Baker和第二个Cake。我想避免冗余,并将其合并到单个输出中,使贝克仅出现一次。

我还希望找到一种解决方案,该解决方案具有足够的通用性(或足够简单,可以轻松扩展),以处理更深的层次,从而对“ Cake”顶点上的“ out”边缘进行相同的处理,例如“ Cake”->“ madeOf”- ->“成分”,这样我就可以得到一个面包师,上面放着每个蛋糕,一次只放一次,每种食材都放一次,而且所有东西都具有全部特性。

Questioner
jupiterjelly
Viewed
0
noam621 2020-12-01 05:39:13

你可以使用两个project步骤并使用,valueMap因此你无需指定属性:

g.V().hasLabel('Baker').
  project('Baker', 'Cake').
    by(valueMap(true)).
    by(out('bakes').
      project('Cake', 'Ingredients').
        by(valueMap(true)).
        by(out('madeOf').valueMap(true).
          fold()).fold())

例如:https//gremlify.com/34e9o3r9gag