ArangoDB嵌套对象集合键关联查询问题求助
解决ArangoDB嵌套Groups字段的关联查询问题
你的问题核心在于最后一步没有把生成的键值对数组合并成单一对象,而是直接返回了数组。咱们来修正这个查询:
修正后的查询语句
LET user = DOCUMENT('users/312121') LET groups_keys = ATTRIBUTES(user.groups) // 将循环生成的多个单键对象合并为一个完整的groups对象 LET groups_object = MERGE( FOR key IN groups_keys RETURN { [key]: ( FOR group_key IN user.groups[key] // DOCUMENT支持直接传入集合名和键,比CONCAT更简洁 LET group = DOCUMENT('groups', group_key) RETURN { group_id: group._key, name: group.name } ) } ) // 合并原user数据和新的groups对象 RETURN MERGE(user, { groups: groups_object })
关键修改点说明
- 用
MERGE()包裹外层的FOR循环:原来的查询生成的是包含多个{"1": [...], "2": [...]}这样的单键对象数组,MERGE()会把这些对象合并成一个大对象,正好符合你需要的嵌套结构。 - 修正变量引用:你之前最后一行错误引用了未定义的
groups变量,现在替换为合并后的groups_object。 - 简化
DOCUMENT调用:DOCUMENT('groups', group_key)是ArangoDB推荐的写法,和DOCUMENT(CONCAT('groups/', group_key))效果一致,但可读性更好。
验证输出
执行这个查询后,你会得到期望的格式:
{ "_key": "312121", "name": "Ash", "groups": { "1": [{ "group_id": "323223", "name": "Group 1" }], "2": [{ "group_id": "313131", "name": "Group 2" }] } }
内容的提问来源于stack exchange,提问作者Naren
相关产品推荐
相关产品推荐

