如何从gremlin中的顶点获取ID和所有属性?

时间:2019-04-03 12:20:33

标签: gremlin tinkerpop

我正在将AWS Neptune与gremlin一起使用,我想在一个查询中获取具有该顶点的所有属性的顶点的ID。我该怎么办?

我尝试过

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

但是输出是:

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

没有标签,没有ID。

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

就是恶意软件Source属性有时是文件顶点的一部分,有时不是。因此,如果没有恶意软件来源属性,则会引发异常。

1 个答案:

答案 0 :(得分:1)

有很多方法,但通常使用valueMap()

g.V(1).valueMap(true)

在TinkerPop 3.4.0+中,使用by()的{​​{3}}可以更好地控制输出:

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

您还可以通过各种方式使用project(),但这需要您知道所有想要抓取的钥匙。通常,您应该addition

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

如果属性值对于顶点是可选的,则只需在by()调制器中创建if-then条件:

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