首页 > 解决方案 > 在 ArangoDB 中进行 EXISTS 查询的最佳方法是什么

问题描述

我想检查一个查询(过滤器)是否不为空,在 PostgreSQL 中是这样的:

select EXISTS(select 1 from tab where tab.name = 'abc')

https://www.postgresql.org/docs/11/functions-subquery.html

我目前在 AQL 中的方法是:

RETURN LENGTH(for d in tab filter d.name = 'abc' RETURN 1) > 0

标签: arangodbaql

解决方案


子查询FOR d IN tab FILTER d.name == 'abc'可能会在早期找到匹配的文档,但会继续寻找更多,因为没有定义限制。因此,我建议:

RETURN LENGTH(FOR d IN tab FILTER d.name == 'abc' LIMIT 1 RETURN true) > 0

这将[ true ]作为查询结果返回。

您也可以RETURN d 从 v3.4.0 开始。优化器规则optimize-subqueries识别模式LENGTH(... RETURN doc)并替换doc为常量值true


推荐阅读