gremlin - 如何从 gremlin 中不同顶点的属性中获取结果?
问题描述
我有这个数据库:
客户 => 事件 => 文件 => 文件名
- 客户有身份证
- 事件有一个 ID 和一个reportedOn 属性
- 文件具有 ID 和 fileSize、mimeType、恶意软件属性
- 文件名有一个 ID
客户端有一个传出边缘到事件(报告),事件有一个传出边缘到文件(包含文件),文件有一个传出边缘到文件名(hasName)。
我必须在 gremlin 中执行什么查询才能在一个结果中获取文件名 ID、文件 ID、文件文件大小和事件报告值?
这是一些示例数据:
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()
解决方案
您发布的用于创建示例数据的遍历包含许多错误。不要在屁股上痛苦,仔细检查你发布的内容。
无论如何,这是您查询的固定版本:
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()
获取 filename-ID、file-ID、file-fileSize 和 event-reportedOn 值
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]
只有path().from('incident').by(valueMap())
独处已经可以为您提供所需的一切。但是,我添加了一些重新分组以获得更好的格式化结果。
推荐阅读
- spring - Spring Data MongoDB(v4.4.1)文本搜索不起作用
- c# - 如何将新对象替换为具有相同 ID 对象的现有对象列表<>?
- laravel - 如何在 laravel 中将 type 作为 STRING 用于多态关系表 ids (...able_id) 表?
- r - 可能缺少col时的R sqldf SELECT
- node.js - 通过 axios.post() 发送数据并在 Node.js 中的函数中接收数据时出错
- google-cloud-platform - GCP 数据流发布/订阅到云存储上的文本文件
- sql - SQL:特定条件下的不同记录
- exception - SAP NCO 问题(不支持非 ABAP RFC 客户端(合作伙伴类型))
- sql - 如何在 impala 中转换此查询?
- python - 使嵌套循环运行得更快,例如通过 Python 中的矢量化