graphgremlintinkerpop3tinkergraph

Cannot access specific vertex by ID, using TinkerGraph in Gremlin Console


I cannot select a specific vertex, by executing g.V(3640).valueMap(true).unfold(). Any command which contains an ID between the parentheses in the g.V() command does not seem to work.

This is what I did:

I'm new to Graph databases and experimenting with the Gremlin console. I started by creating an instance:

graph = TinkerGraph.open()
g=graph.traversal()

and loading sample data by importing a .graphml database file:

g.io(graphml()).readGraph('/full/path/to/air-routes-latest.graphml')

which seemed to work fine because a count gives a nice result back

gremlin> g.V().count()
==>3642

Unfortunately the following does not work:

gremlin> g.V(3640).valueMap(true).unfold()

Which I think is odd, because by executing the following

gremlin> g.V()
==>v[3640]
==>v[2306]
...

the ID does seem to exist. Any ideas why I cannot access a specific ID? I tried different commands but g.V() seems to work fine, and g.V(3640) does not. Is it because I use TinkerGraph instead of a Gremlin database, of what might be the problem?

EDIT:

It seems that my id's were saved as strings, because g.V("2").valueMap(true).unfold() does give me results.


Solution

  • I think you likely have an issue with the "type" of the identifier. I suspect that if you do:

    g.V(3640L)
    

    that you will get the vertex you want. By default, TinkerGraph handles id equality with equals() so if you try to find an integer when the id is a long it will act like it's not there. You can modify that default if you like with an IdManager configuration discussed here. Note that this is also discussed in more detail in Practical Gremlin.