ArangoDB AQL三个及以上集合嵌套关联合并查询实现方法
FOR u IN users FOR c IN cities FOR r IN regions FILTER u.city == c._id AND c.region == r._id RETURN { // 剔除user中多余的city关联ID字段,保留其余所有属性 user: UNSET(u, "city"), // 先剔除city中原有的region关联ID字段,再合并嵌套的region完整对象 city: MERGE(UNSET(c, "region"), { region: r }) }
如果不需要剔除原关联ID字段,也可以直接简化为:
RETURN { user: u, city: MERGE(c, { region: r }) }
扩展到N层嵌套的通用逻辑
不管要关联多少层级,遵循统一的嵌套规则即可:
- 从最外层的主集合(比如这里的users)开始,逐层向下关联子集合
- 每一层关联到新的子对象后,将当前层对象中对应的关联ID字段,替换为子对象的完整内容即可
举个四层关联的例子,假设新增Countries集合,Regions文档中存在country字段关联Countries._id,写法如下:
FOR u IN users FOR c IN cities FOR r IN regions FOR cn IN countries FILTER u.city == c._id AND c.region == r._id AND r.country == cn._id RETURN { user: UNSET(u, "city"), city: MERGE(UNSET(c, "region"), { region: MERGE(UNSET(r, "country"), { country: cn }) }) }
内容的提问来源于stack exchange,提问作者Hoodox
相关产品推荐
相关产品推荐

