我正在尝试使用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”- ->“成分”,这样我就可以得到一个面包师,上面放着每个蛋糕,一次只放一次,每种食材都放一次,而且所有东西都具有全部特性。
你可以使用两个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())