[我试图通过将遍历组件放入函数中来使用gremlin python创建遍历的可重用组件,而我遇到了一些遍历组件无法正常工作的问题。
作为设置,我正在使用docker容器运行gremlin服务器,并且配置文件从github repo加载到现代图形中>
docker run -p 8182:8182 tinkerpop/gremlin-server:3.4.6 conf/gremlin-server-modern.yaml
我的测试python代码如下所示:
from gremlin_python.process.anonymous_traversal import traversal
from gremlin_python.process.graph_traversal import __
from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection
def connect_gremlin(endpoint='ws://localhost:8182/gremlin'):
return traversal().withRemote(DriverRemoteConnection(endpoint,'g'))
def n():
return __.values('name')
def r():
return __.range(2,4)
g = connect_gremlin()
# works as expected
g.V().map(n()).toList()
# returns an empty list
g.V().map(n()).filter(r()).toList()
# but using range step directly works as expected
g.V().map(n()).range(2,4).toList()
我可以成功地将values
步骤移至函数中,但是当我尝试对range
步骤执行相同的操作时,它将返回一个空列表,而不是第二至第四项。有人知道我在做什么错吗?
[我试图通过将遍历组件放入函数中来使用gremlin python创建遍历的可重用组件,而我遇到了一些遍历组件...] >>
<
map
步骤旨在将每个穿越器的状态映射到新状态。在单个遍历器的上下文中,range
从任何地方开始但零开始都无法满足您的期望。
以下是一些使用Python的示例:
>>> g.V().map(__.range(0,1)).limit(5)
[['V'], ['map', [['range', 0, 1]]], ['limit', 5]]
>>> g.V().map(__.range(0,1)).limit(5).toList()
[v[1400], v[1401], v[1402], v[1403], v[1404]]
>>> g.V().map(__.range(0,2)).limit(5).toList()
[v[1400], v[1401], v[1402], v[1403], v[1404]]
>>> g.V().map(__.range(1,2)).limit(5).toList()
[]
这就是values
步骤在map
步骤内部而range
无效的原因。>>
而不是不使用map
步骤来注入代码,为什么不只是逐步增加遍历,然后在完成后对其进行迭代?