无法使用Gremlin控制台中的TinkerGraph按ID访问特定顶点

无法使用Gremlin控制台中的TinkerGraph按ID访问特定顶点,graph,gremlin,tinkerpop3,tinkergraph,Graph,Gremlin,Tinkerpop3,Tinkergraph,通过执行g.V(3640).valueMap(true).unfold(),我无法选择特定的顶点。在g.V()命令的括号之间包含ID的任何命令似乎都不起作用 这就是我所做的: 我不熟悉图形数据库,也不熟悉Gremlin控制台。我首先创建了一个实例: graph = TinkerGraph.open() g=graph.traversal() 并通过导入.graphml数据库文件加载样本数据: g.io(graphml()).readGraph('/full/path/to/air-routes

通过执行
g.V(3640).valueMap(true).unfold()
,我无法选择特定的顶点。在
g.V()
命令的括号之间包含ID的任何命令似乎都不起作用

这就是我所做的:

我不熟悉图形数据库,也不熟悉Gremlin控制台。我首先创建了一个实例:

graph = TinkerGraph.open()
g=graph.traversal()
并通过导入
.graphml
数据库文件加载样本数据:

g.io(graphml()).readGraph('/full/path/to/air-routes-latest.graphml')
这似乎很有效,因为计数会给出一个很好的结果

gremlin> g.V().count()
==>3642
不幸的是,以下方法不起作用:

gremlin> g.V(3640).valueMap(true).unfold()
我认为这很奇怪,因为通过执行以下命令

gremlin> g.V()
==>v[3640]
==>v[2306]
...
ID似乎确实存在。知道我为什么不能访问特定ID吗?我尝试了不同的命令,但是
g.V()
似乎可以正常工作,而
g.V(3640)
不行。是因为我使用TinkerGraph而不是Gremlin数据库,这可能是什么问题

编辑:


似乎我的id被保存为字符串,因为
g.V(“2”).valueMap(true).unfold()确实会给我结果。

我认为您可能对标识符的“类型”有问题。我怀疑如果你这样做:

g.V(3640L)

你会得到你想要的顶点。默认情况下,TinkerGraph使用
equals()
处理id相等,因此,如果您尝试在id为长时查找整数,它将表现为不存在。如果愿意,可以通过讨论的
IdManager
配置修改该默认值。请注意,这一点在中也进行了更详细的讨论。

我刚刚发现,通过将数字放在括号之间,例如
g.V(“3640”)
可以得到结果。所以它可能被存储为字符串?我正在读开尔文·R·劳伦斯的书,在这一点上,我被前几个例子中的一个困住了,因为知识太少,很难找到问题的确切位置
g.V(3640L)
对我不起作用。我已将您的答案标记为解决方案,因为您提供的链接向我展示了如何实际告诉TinkerGraph如何存储ID,它确实有帮助。现在,即使是不带括号的查询
g.V(3640).valueMap()
,也能正常工作。谢谢嗨,埃里克,在书中我举了一个如何建立ID管理器的例子。我也看到了你的问题。我将添加一个提示框,以澄清在您发现文本令人困惑的地方这一点。还要注意的是,如果您在某一点上超越TinkerGraph,不同的Graph DB后端可能会有特定的ID规则。例如,有些仅允许字符串ID等。