投影 Gremlin 中的所有值

Projecting all values in Gremlin

我想在 Gremlin 中连接两个相关顶点的所有值。

鉴于以下情况:-

g.addV('Path').as('1').
  property(single, 'Source', 12345).
  addV('PathState').as('2').
  property(single, 'Length', 201).
  property(single, 'Tag', 'TestTag').
  addE('state').from('1').to('2')

我知道我可以使用命名值编写投影,如下所示:

g.V().hasLabel('Path')
.project("Id", "Label", "Length", "Tag")
.by(id)
.by(label)
.by(out('state').values("Length"))
.by(out('state').values("Tag"))

我正在寻找一种更通用的解决方案,我可以在连接的 'State' 个顶点可以具有不同属性的情况下使用它。

是否有通用的方法将连接的 'state' 顶点的所有属性连接到路径一?

我正在使用 C# Gremlin.Net 尝试构建一个通用方法来检索 'Vertex with connected StateVertex',因此我有一个后备方法,即使用反射来构建一个 'by()' 位遍历,不过感觉应该有更简单的方法。

我认为您可以通过在查询中使用 path().by(elementMap())path().by(valueMap()) 步骤来获得您正在寻找的信息,如下所示:

gremlin> g.V().hasLabel('Path').out('state').path().by(elementMap())
==>[[id:0,label:Path,Source:12345],[id:2,label:PathState,Length:201,Tag:TestTag]]

如果您希望在单个 Map 中返回这些值,您可以通过在 by() 调制器中进行一些更复杂的操作来实现这一点,如下所示:

gremlin> g.V().hasLabel('Path').out('state').path().by(project('id', 'label').by(id()).by(label())).by(valueMap()).unfold().unfold().fold()
==>[id=0,label=Path,Length=[201],Tag=[TestTag]]

但是,这似乎有潜在问题,因为我不确定您希望如何处理重复值。