OrientDB:基于关联顶点RID与边属性创建映射查询
解决OrientDB中组合关联顶点RID与边属性为映射的问题
我之前也碰到过一模一样的需求,OrientDB的MAP()函数刚好能帮你把两个列表对应成键值对的映射。直接给你可行的查询方案,再拆解细节:
SELECT *, MAP(connectedRids, connectedNames) AS connected FROM ( SELECT *, OUT('E1','E2').@rid AS connectedRids, OUT('E1','E2').name AS connectedNames FROM A WHERE @rid = #A:A1 -- 替换成你的A1实际RID )
关键逻辑解释:
- 内层查询:先获取A1的所有属性,同时通过
OUT('E1','E2')分别取出关联顶点的RID列表(connectedRids)和对应边的name属性列表(connectedNames)——这部分你已经能实现,对吧? - 外层查询:用
MAP()函数把两个列表按位置一一绑定,生成键为RID、值为边name的映射,命名为connected,同时保留A1的所有原始属性。
如果你的边是双向关联(需要用IN或BOTH方向),只需要把内层的OUT换成对应的方向即可,MAP()函数的对应逻辑完全通用。
要是想更简洁,也可以不用子查询,直接内联写法:
SELECT *, MAP(OUT('E1','E2').@rid, OUT('E1','E2').name) AS connected FROM A WHERE @rid = #A:A1
这个写法和上面效果完全一致,只是把两次OUT查询合并到MAP()参数里,OrientDB会自动处理列表的对应关系。
内容的提问来源于stack exchange,提问作者dargolith
相关产品推荐
相关产品推荐

