ArangoDB从边集合获取数据时如何添加过滤条件
问题解决方案
错误原因
你的查询存在两个核心问题导致返回null:
FILTER r._key == 1中ArangoDB的_key字段默认是字符串类型,直接和数字1匹配无法命中对应房间文档- 子查询里
FILTER rooms_users.type == "admin"写法错误,遍历边集合时不能直接用边集合名读取属性,需要指定当前遍历到的边变量来获取属性值
修正后的查询语句
FOR r IN rooms FILTER r._key == "1" LET admins = ( FOR u, edge IN ANY r rooms_users FILTER edge.type == "admin" RETURN u ) RETURN MERGE(r, {admin: admins[0]})
修改说明
- 将
r._key == 1调整为r._key == "1",匹配字符串类型的_key值 - 子查询遍历语法改为
FOR u, edge IN ANY r rooms_users,第二个变量edge即代表当前遍历到的rooms_users边文档,直接读取edge.type即可拿到边的类型属性做过滤 - MERGE方法支持直接传入多个对象合并,不需要额外包裹成数组,写法更简洁
内容的提问来源于stack exchange,提问作者Nani
相关产品推荐
相关产品推荐

