如何从gremlin中不同顶点的属性中获得结果?

时间:2019-03-22 13:05:50

标签: gremlin

我有这个数据库:

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

  • 客户有一个ID
  • 事件具有ID和reportOn属性
  • 文件具有ID和fileSize,mimeType,恶意软件属性
  • 文件名具有ID

客户端对事件具有外发边缘(已报告),事件对文件具有外发边缘(containsFile),文件对文件名具有外发边缘(hasName)。

我必须在gremlin中执行哪些查询才能在一个结果中获取文件名ID,文件ID,文件fileSize和event-reportedOn值?

以下是一些示例数据:

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

1 个答案:

答案 0 :(得分:0)

您为创建示例数据而发布的遍历包含许多错误。别着急,仔细检查您发布的内容。

无论如何,这是查询的固定版本:

const browser = this.iab.create('https://www.google.com', '_blank');
browser.show();
  

获取文件名ID,文件ID,文件fileSize和event-reportedOn值

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

仅靠gremlin> g.V().has('client','id','1'). ......1> out('reported').as('incident'). ......2> out('containsFile'). ......3> out('hasName'). ......4> path(). ......5> from('incident'). ......6> by(union(group(). ......7> by(label). ......8> by('id'), ......9> valueMap()). .....10> unfold(). .....11> filter(select(keys).is(neq('id'))). .....12> group(). .....13> by(keys). .....14> by(select(values).unfold())). .....15> unfold().unfold(). .....16> group(). .....17> by(keys). .....18> by(select(values).unfold()) ==>[fileName:file.pdf,file:100,reportedON:2/15/2019 8:01:19 AM,fileSize:432534,incident:11] 就可以满足您的所有需求。但是,我添加了一些重新分组以获得更好的格式化结果。