投影 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]]
但是,这似乎有潜在问题,因为我不确定您希望如何处理重复值。
我想在 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]]
但是,这似乎有潜在问题,因为我不确定您希望如何处理重复值。