You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OrientDB查询时如何将关联顶点及边字段嵌入另一个顶点结构

实现方案

完全可以实现该查询需求,你可以结合OrientDB的MATCH语句和内置Map操作函数完成动态字段拼接,以下是可用的查询语句:

MATCH 
  {class: Activity, as: act} -Has{as: has_edge}-> {class: User, as: u}
RETURN 
  act.* exclude field_values,
  mapMerge(
    act.field_values,
    map(has_edge.field_id, u)
  ) AS field_values

语法说明

  • MATCH段匹配完整的Activity->Has->User路径,分别给Activity、Has边、User设置别名
  • 用map()函数动态生成以边的field_id为键、完整User顶点为值的单键Map
  • 用mapMerge()函数把Activity原有的field_values和上面生成的动态Map合并,得到你需要的结构
  • 投影段用act.* exclude field_values保留Activity所有原生字段,仅替换field_values为合并后的结果,完全符合你给出的返回格式要求
  • 如果单条Activity关联了多条Has边,该语句也会自动把所有边对应的键值对合并到field_values中

如果你需要永久修改存储的Activity数据而不仅仅是查询返回转换后的结果,可以用以下UPDATE语句:

UPDATE Activity 
SET field_values = mapMerge(
  field_values,
  map( outE('Has').field_id[0], out('Has')[0] )
)
WHERE @rid = '#28:0'

如果一条Activity对应多个Has边,可以用循环逻辑批量处理所有关联边:

LET $act = SELECT FROM Activity WHERE @rid = '#28:0' LIMIT 1;
LET $edges = SELECT expand(outE('Has')) FROM $act;
FOREACH $e IN $edges {
  UPDATE $act 
  SET field_values = mapMerge(field_values, map($e.field_id, $e.inV()))
}

内容的提问来源于stack exchange,提问作者Samuele

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:57:04