我正在将 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 属性,则会引发异常。
方法很多,但一般都用 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)
归档时间: |
|
查看次数: |
7546 次 |
最近记录: |