如何在ArangoDB中通过关联集合过滤外部集合?
ArangoDB 实现“返回带非空标题摘要的书籍及对应摘要”的惯用方法
问题分析
你的原查询问题大概率是缩进错误导致RETURN语句位置不对——如果RETURN写在第二个FOR summary循环之外,那么即使没有找到符合summary.title != ""条件的摘要,也会返回当前遍历到的书籍(此时summary可能是未匹配到的无效值)。
惯用解决方法
方法1:先筛选有效摘要,再关联书籍(高效推荐)
先过滤出标题非空的摘要,再通过_key关联对应的书籍,同时确保书籍存在:
FOR summary IN summaries FILTER summary.title != "" LET book = DOCUMENT("books", summary._key) FILTER book != null RETURN { book, summary }
这种方式避免了笛卡尔积遍历,性能更优,尤其当集合数据量较大时。
方法2:修正缩进的嵌套循环
确保RETURN语句在第二个FOR循环内部,只有当同时匹配到对应书籍且摘要标题非空时,才返回结果:
FOR book IN books FOR summary IN summaries FILTER book._key == summary._key FILTER summary.title != "" RETURN { book, summary }
方法3:使用内连接语法
利用ArangoDB的JOIN函数实现内连接,仅返回两边匹配且摘要标题非空的文档:
FOR book, summary IN JOIN(books, summaries, "_key", "_key") FILTER summary.title != "" RETURN { book, summary }
内容的提问来源于stack exchange,提问作者Naatan
相关产品推荐
相关产品推荐

