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

Chr*_*her 4 gremlin tinkerpop

我正在将 AWS Neptune 与 gremlin 一起使用,并且我想在一个查询中获取具有顶点所有属性的顶点的 id。我怎样才能做到这一点?

我试过了

g.V().hasLabel('file').valueMap(true) 
Run Code Online (Sandbox Code Playgroud)

但输出是:

{ "fileSize": [ "9170" ], "Gremlin.Net.Process.Traversal.T": "f1fce58306f85ca7050503160640d735c9919c8fc85881d65de80bfe31b5ca24", "mimeType": [ "text/html" ] }
Run Code Online (Sandbox Code Playgroud)

没有标签,也没有 ID。问题在于

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

Run Code Online (Sandbox Code Playgroud)

是属性malwareSource 有时是文件顶点的一部分,有时不是。因此,如果没有malwareSource 属性,则会引发异常。

ste*_*tte 8

方法很多,但一般都用 valueMap()

g.V(1).valueMap(true)
Run Code Online (Sandbox Code Playgroud)

在TinkerPop有关3.4.0+,输出是一个好一点与控制by()

g.V(1).hasLabel("person").valueMap().by(unfold()).with(WithOptions.ids)
Run Code Online (Sandbox Code Playgroud)

您也可以通过project()各种方式使用,但这需要您知道您想要获取的所有密钥。通常,您应该无论如何知道您的密钥

g.V(1).
  project('id','label',' fileSize', 'mimeType', 'malwareSource').
    by(id).
    by(label).
    by('fileSize').
    by('mimeType').
    by('malwareSource')
Run Code Online (Sandbox Code Playgroud)

如果属性值对于顶点是可选的,那么只需在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'))
Run Code Online (Sandbox Code Playgroud)

  • gV(1).hasLabel('file').valueMap().by(unfold()).with(WithOptions.ids) 在 azure 和 neptune 中抛出语法错误异常 (2认同)

Thi*_*mal 5

现在,您可以使用elementMap()

g.V(1).elementMap()
Run Code Online (Sandbox Code Playgroud)