Gremlin查询如何让valueMap返回的顶点index属性按数字顺序排列
问题解决方法
你可以通过自定义属性排序逻辑替换原生valueMap的返回规则来实现需求。原生valueMap默认按字典序排列属性键,才会出现index11排在index2之前的问题,你可以修改查询中的by子句,提取属性后按数字后缀排序再构造返回结构,修改后的查询示例如下:
%%gremlin -p v,inE,outV,inE,outV g.V('city_brand').inE().outV().inE().outV().path(). by( // 合并token属性和排序后的index属性返回 union( // 保留id、label等基础token project('id', 'label').by(id).by(label), // 筛选index开头的属性,按后缀数字排序后构造键值对 properties().hasKey(TextP.startingWith('index')) .order().by(__.key().substring(5).as(Int)) .group().by(key).by(value()) ).unfold().group().by(keys).by(values) )
说明
- 排序逻辑中截取属性名
index后的字符串转为整数排序,完全匹配你需要的index1到index12的正序要求 - 如果你使用的图数据库禁用了自定义函数,也可以在客户端拿到
valueMap的返回结果后,自行提取属性键排序重组,实现成本更低 - 如果你不需要保留id、label之外的其他非index属性,可以删掉对应的union逻辑,只保留排序后的index属性即可
内容的提问来源于stack exchange,提问作者48bits
相关产品推荐
相关产品推荐

