[英]How to check if ArangoDB query is not empty?
我想做一个exists
PostgreSQL查询。
假设我有一个Q
ArangoDB查询(AQL)。 如何检查Q是否返回任何结果?
例:
Q = "For u in users FILTER 'x@example.com' = u.email"
我有想法,但是找不到衡量性能的简单方法:
Length
: RETURN LENGTH(%Q RETURN 1) > 0
Frist
: RETURN First(%Q RETURN 1) != null
以上, %Q
替代了开头定义的查询。
您需要AQL解决方案吗?
仅计数:
var q = "For u in users FILTER 'x@example.com' = u.email";
var res = db._createStatement({query: q, count: true}).execute();
var ct = res.count();
是我能想到的最快的。
我认为对于具有以下结构的通用选择查询,实现此目标的最佳方法
Q =“对于用户中的FILTER'x@example.com'= u.email”
首先向查询添加LIMIT子句,然后仅使其返回常量值(与完整文档相反)。
例如,以下查询返回单个匹配(如果存在此类文档),或者返回空数组(如果不存在匹配项):
FOR u IN users FILTER 'x@example.com' == u.email LIMIT 1 RETURN 1
(请注意,我还将运算符从=
更改为==
因为否则查询将不会解析)。
请注意,通过在搜索属性上创建索引(例如email
,该查询可能会受益匪浅。 没有索引,查询将进行完整的集合扫描,并在第一个匹配项时停止,而有了索引,它将最多读取单个索引条目。
最后,为回答您的问题, EXISTS
的查询的模板将变为
LENGTH(%Q LIMIT 1 RETURN 1)
或通过示例查询充实:
LENGTH(FOR u IN users FILTER 'x@example.com' == u.email LIMIT 1 RETURN 1)
LENGTH(...)
将返回匹配数,在这种情况下将为0或1。它还可用于如下所示的过滤条件
FOR ....
FILTER LENGTH(...)
RETURN ...
因为LENGTH(...)
将为0或1,这在FILTER条件的情况下将为false或true。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.