Gremlin查询如何获取model顶点及关联diagram的嵌套聚合结果
解决方案
你需要用聚合操作将同一 model 对应的所有 diagram 合并为列表,调整后的 Gremlin 查询语句如下:
// 完全匹配你需要的外层包裹models的JSON结构 g.V().hasLabel('model'). project('name', 'id', 'diagram'). by('name'). by(id). by(out('has').hasLabel('diagram'). project('name', 'id'). by('name'). by(id). fold()). fold(). project('models'). by()
如果你只需要Map<Model, List<Diagram>>格式,不需要外层的models字段,可以简化为:
g.V().hasLabel('model'). group(). by(elementMap('id', 'name')). by(out('has').hasLabel('diagram').elementMap('id', 'name').fold())
逻辑说明
你之前的写法会遍历每一条model到diagram的路径,每条路径单独返回所以会出现重复的model条目。调整后的查询逻辑:
- 匹配所有label为model的顶点
- 对每个model用
project()构造你需要的name、id、diagram三个字段 - 其中
diagram字段通过子查询遍历当前model关联的diagram顶点,构造对应字段后用fold()把所有diagram聚合成列表 - 最后把所有model结果聚合成列表,再套一层外层的models字段即可完全匹配目标结构
内容的提问来源于stack exchange,提问作者Pace17881
相关产品推荐
相关产品推荐

