Вы действительно должны использовать project()
- код гораздо более читабелен, как показано в отдельном вопросе, который у вас был здесь :
gremlin> g.V().has('malwareSource', 'malware').
......1> project('FILE', 'FILENAME', 'FILEVALUES', 'INCIDENTVALUES').
......2> by().
......3> by(out('hasName')).
......4> by(valueMap()).
......5> by(__.in('containsFile').valueMap().fold())
==>[FILE:v[5],FILENAME:v[9],FILEVALUES:[fileSize:[432534],malwareSource:[malware],id:[100]],INCIDENTVALUES:[[reportedON:[2/15/2019 8:01:19 AM],id:[11]]]]
намного проще следовать, хотя я все еще не понимаю, зачем вам эта возвращаемая структура данных, поскольку она повторяет данные в результате для "FILE" и "FILEVALUES". Ну, кроме этого, вы можете видеть, как легко получить количество входящих ребер ... это просто добавление дополнительного ключа к project()
и дополнительного модулятора by()
для выполнения count()
:
gremlin> g.V().has('malwareSource', 'malware').
......1> project('FILE', 'FILENAME', 'FILEVALUES', 'INCIDENTVALUES', 'COUNT').
......2> by().
......3> by(out('hasName')).
......4> by(valueMap()).
......5> by(__.in('containsFile').valueMap().fold()).
......6> by(__.in().count())
==>[FILE:v[5],FILENAME:v[9],FILEVALUES:[fileSize:[432534],malwareSource:[malware],id:[100]],INCIDENTVALUES:[[reportedON:[2/15/2019 8:01:19 AM],id:[11]]],COUNT:1]
Возможно, вы могли бы выяснить, как сделать строки 5 и 6 один раз, чтобы избежать двойной итерации, но я бы, вероятно, попытался бы оптимизировать это как отдельную проблему и рассмотреть возможность корректировки структуры возвращаемых данных, чтобы учесть это.