如何计算gremlin中的传入顶点?

问题描述 投票:0回答:1

我有这个数据库:

客户端=>事件=>文件=>文件名

客户端具有ID事件具有ID和reportOn属性文件具有ID和fileSize,mimeType,恶意软件属性文件名具有ID客户端具有传出边缘到事件(已报告),事件具有传出边缘到文件(containsFile),文件有一个传出的边缘到文件名(hasName)。

以下是一些示例数据:

g.addV('client').property('id','1').as('1').
  addV('incident').property('id','11').property('reportedON', '2/15/2019 8:01:19 AM').as('11').
  addV('file').property('id','100').property('fileSize', '432534').property('malwareSource', 'malware').as('100').
  addV('fileName').property('id','file.pdf').as('file.pdf').
  addE('reported').from('1').to('11').
  addE('containsFile').from('11').to('100').
  addE('hasName').from('100').to('file.pdf').iterate()

我正在执行此查询:

g.V().has('malwareSource', 'malware').as('FILE').out('hasName').as('FILENAME').select('FILE').in('containsFile').as('INCIDENT').select('FILE').valueMap().as('FILEVALUES').select('INCIDENT').valueMap().as('INCIDENTVALUES').select('FILE', 'FILEVALUES', 'FILENAME', 'INCIDENTVALUES')

如何计算每个文件与“恶意软件”属性有多少传入顶点?

gremlin
1个回答
0
投票

你真的应该使用project() - 代码是如此可读,如你有here的单独问题所示:

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行以避免双重迭代,但我可能会尝试将其作为单独的问题进行优化,并考虑调整返回的数据结构以允许它。

© www.soinside.com 2019 - 2024. All rights reserved.