Gremlin Python如何使by(values('name','score'))工作

时间:2018-07-21 18:46:04

标签: gremlin

我的测试图具有以下路径:test_score-属于->人。我能够使以下脚本正常工作。

graph = Graph()
conn = DriverRemoteConnection('ws://localhost:8182/gremlin', 'g')  # should learn to open a new graph
gr = graph.traversal().withRemote(conn)
print(gr.V().hasLabel("test_score").out("belonged_to").path().by("score").by("name").toList())

已打印出

  

[[95,'marko'],[95,'vadas'],[88,'vadas'],[85,'marko'],[100,   'josh'],[80,'vadas'],[80,'josh'],[60,'josh'],[75,'marko']]

顶点test_score具有属性'name''score',我喜欢打印出这两个属性。我尝试了以下内容,但行却出错了。

print(gr.V().hasLabel("test_score").out("belonged_to").path().by(values("name","score")).by("name").toList())

错误:

  

NameError:未定义名称“值”。这是因为by()   只需要一个字符串参数。

如何实现为test_score顶点打印多个属性的目标。

谢谢。

1 个答案:

答案 0 :(得分:1)

您步入正轨,但您可能需要将values()建立为python中的全局函数-类似于:

from gremlin_python.process.graph_traversal import __ as AnonymousTraversal

values = AnonymousTraversal.values

然后values()可用后,您需要稍微修改by()调制器以以fold()终止:

gr.V().hasLabel("test_score").
   out("belonged_to").
   path().
     by(values("score", "name").fold()).
     by("name").toList()

您需要fold()才能将流减少为单个值(即List)。