You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ArangoDB LIKE函数无法筛选含'*'值,查询返回空结果求助

问题根源:混淆了AQL LIKE与SQL LIKE的通配符规则

你遇到的问题核心是搞混了ArangoDB AQL中LIKE()函数的通配符逻辑和传统SQL的LIKE规则,并不是ArangoDB本身的问题。

先明确AQL LIKE的核心规则:

  • 在AQL的LIKE()函数里,*才是匹配任意长度字符(包括0个)的通配符(对应SQL里的%);?是匹配单个字符的通配符(对应SQL里的_)。
  • 要匹配字面量的*、?或转义符\,需要用\进行转义;而%和_在AQL LIKE里只是普通字符,不需要转义。

你的查询为什么返回空?

你写的查询:

FOR doc IN PatternInfo
FILTER LIKE(doc.pattern, "%test*n%", false)
RETURN doc

这里的%是普通字符,*是通配符,所以这个查询的实际逻辑是:找pattern字段中包含%test + 任意字符 + n%的文档。你的三个文档里没有符合这个条件的,自然返回空结果。

正确的解决方案

如果你要筛选包含字面量*的pattern,有两种简单的方式:

方案1:用CONTAINS()函数(更直观)

CONTAINS()是直接检查字符串是否包含指定子串,不需要处理通配符,代码更简洁:

FOR doc IN PatternInfo
FILTER CONTAINS(doc.pattern, "*")
RETURN doc

这个查询会正确返回前两个文档(abcde*fgh和test*new)。

方案2:用LIKE()函数(严格按需求使用LIKE)

如果一定要用LIKE(),需要转义字面量的*,同时用通配符匹配前后的任意字符:

FOR doc IN PatternInfo
FILTER LIKE(doc.pattern, "*\\*", false)
RETURN doc

这里的\\*是转义后的字面量*,前后的*是通配符,表示匹配任意包含*的字符串。

关于官方文档的小误解

你提到官方文档说LIKE仅需转义%和_,大概率是混淆了传统SQL的LIKE规则和AQL的LIKE规则。ArangoDB的AQL LIKE确实以*/?作为通配符,只有这两个符号和转义符\需要转义。

内容的提问来源于stack exchange,提问作者Rupak Karna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:34:04