如何在Gremlin/Neptune中实现基于边方向的条件排序?
按边的入/出顶点条件排序关联边解决方案
你的查询失效核心原因是**values()与choose()的逻辑组合错误**:你用choose返回了属性名称字符串,但values()无法通过字符串动态获取属性值,得把属性值的获取逻辑直接放到choose分支里。
正确的Gremlin查询语句
g.V('id123').bothE() .order() .by(choose(inV().is(V('id123')), values('origin_pinned'), values('target_pinned')), desc)
逻辑说明
bothE():获取ID为id123的顶点的所有入边和出边choose(inV().is(V('id123')), ...):判断当前边的入顶点是否是目标顶点id123:- 若是入边(目标顶点是这条边的终点),则用
origin_pinned属性值排序 - 若是出边(目标顶点是这条边的起点),则用
target_pinned属性值排序
- 若是入边(目标顶点是这条边的终点),则用
desc:指定按属性值降序排列
可选优化(处理空属性值)
如果部分边可能缺失对应属性,可通过coalesce设置默认值避免排序异常:
g.V('id123').bothE() .order() .by(choose(inV().is(V('id123')), coalesce(values('origin_pinned'), constant(0)), coalesce(values('target_pinned'), constant(0))), desc)
内容的提问来源于stack exchange,提问作者omri36
相关产品推荐
相关产品推荐

