Как получить идентификатор и все свойства из вершины в гремлине? - PullRequest
3 голосов
/ 03 апреля 2019

Я использую AWS Neptune с gremlin и хочу получить идентификатор вершины со всеми свойствами вершины в одном запросе.Как я могу это сделать?

Я пробовал

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

, но вывод:

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

Нет метки и нет идентификатора.Проблема с

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

заключается в том, что свойство malwareSource иногда является частью файловой вершины, а иногда нет.Поэтому, если не существует свойства malwareSource, генерируется исключение.

1 Ответ

2 голосов
/ 03 апреля 2019

Есть много способов, но обычно используется valueMap():

g.V(1).valueMap(true)

В TinkerPop 3.4.0+ выход немного лучше контролируется с добавлением из by():

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

Если значение свойства является необязательным для вершины, то просто создайте условие if-then в модуляторе by():

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