如何在Gremlin中获取顶点的ID和所有属性?

9

我正在使用带有Gremlin的AWS Neptune,并且我想在一个查询中获取具有所有属性的顶点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') 

有时malwareSource属性是文件节点的一部分,有时不是。如果没有malwareSource属性,则会抛出异常。

2个回答

15

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

g.V(1).valueMap(true)

在TinkerPop 3.4.0+中,通过additionby(),输出得到更好的控制:
g.V(1).hasLabel("person").valueMap().by(unfold()).with(WithOptions.ids)

你也可以以各种方式使用project(),但这需要你知道你想要获取的所有键。通常,你应该无论如何都要了解你的键

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'))

哇 - 我真的误读了你的问题。抱歉 - 我已经更新了我的答案。 - stephen mallette
g.V().hasLabel('file').valueMap(true) 返回:{ "fileSize": [ "9170" ], "Gremlin.Net.Process.Traversal.T": "f1fce58306f85ca7050503160640d735c9919c8fc85881d65de80bfe31b5ca24", "mimeType": [ "text/html" ] } 没有id和标签。 - Christopher
2
在 Azure 和 Neptune 中,g.V(1).hasLabel('file').valueMap().by(unfold()).with(WithOptions.ids) 会抛出语法错误异常。 - Christopher
如果我需要ID、标签以及以下属性:文件大小、MIME类型和恶意软件来源,我该如何使用项目? - Christopher
已添加一个示例,但对于 Neptune,valueMap(true) 应该可以正常工作。如果存在某种错误,我会将此问题指向比我更了解 Neptune 的人。 - stephen mallette
显示剩余4条评论

4
现在,你可以使用 elementMap()
g.V(1).elementMap()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接