[英]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.