簡體   English   中英

如何計算gremlin中的傳入頂點?

[英]How to count incoming vertices in gremlin?

我有這個數據庫:

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

客戶端具有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')

如何計算每個文件與“惡意軟件”屬性有多少傳入頂點?

你真的應該使用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行以避免雙重迭代,但我可能會嘗試將其作為單獨的問題進行優化,並考慮調整返回的數據結構以允許它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM