Christopher
Christopher

Reputation: 91

How to get id and all properties from a vertex in gremlin?

I am using AWS Neptune with gremlin and I want to get the id of a vertex with all properties of the vertex in one query. How can I do this?

I have tried

g.V().hasLabel('file').valueMap(true) 

but the output is:

{ "fileSize": [ "9170" ], "Gremlin.Net.Process.Traversal.T": "f1fce58306f85ca7050503160640d735c9919c8fc85881d65de80bfe31b5ca24", "mimeType": [ "text/html" ] }

No label and no id is there. The problem with

project('id','label',' fileSize', 'mimeType', 'malwareSource').
    by(id).
    by(label).
    by('fileSize').
    by('mimeType').
    by('malwareSource') 

is that the propertie malwareSource is sometimes part of a file vertex an sometimes not. So if there is no malwareSource property an exception is thrown.

Upvotes: 9

Views: 17321

Answers (2)

Thirumal
Thirumal

Reputation: 9536

Now, you can use elementMap()

g.V(1).elementMap()

Upvotes: 5

stephen mallette
stephen mallette

Reputation: 46206

There are lots of ways, but generally use valueMap():

g.V(1).valueMap(true)

In TinkerPop 3.4.0+, the output is a bit better controlled with the addition of by():

g.V(1).hasLabel("person").valueMap().by(unfold()).with(WithOptions.ids)

You could also use project() in various ways, but that requires you to know all the keys you wish to grab. Typically, you should know your keys anyway.

g.V(1).
  project('id','label',' fileSize', 'mimeType', 'malwareSource').
    by(id).
    by(label).
    by('fileSize').
    by('mimeType').
    by('malwareSource')

If a property value is optional to a vertex then just create an if-then condition in the by() modulator:

g.V(1).
  project('id','label',' fileSize', 'mimeType', 'malwareSource').
    by(id).
    by(label).
    by('fileSize').
    by('mimeType').
    by(coalesce(values('malwareSource'),constant('N/A'))

Upvotes: 15

Related Questions