我有这个数据库:
客户=>事件=>文件=>文件名
客户端对事件具有外发边缘(已报告),事件对文件具有外发边缘(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()
答案 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]
就可以满足您的所有需求。但是,我添加了一些重新分组以获得更好的格式化结果。