我在java中查询ArangoDB的Arrays值时遇到了问题。我尝试了String[]和ArrayList,都没有成功。
我的查询:
FOR document IN documents FILTER @categoriesArray IN document.categories[*].title RETURN document
绑定参数:
Map<String, Object> bindVars = new MapBuilder().put("categoriesArray", categoriesArray).get();
categoriesArray
包含一堆字符串。我不确定为什么它不返回任何结果,因为如果我使用以下语句查询:
FOR document IN documents FILTER "Politics" IN document.categories[*].title RETURN document
我得到了我想要的结果。只是在使用数组或数组列表时没有。
我还尝试查询:
FOR document IN documents FILTER ["Politics","Law] IN document.categories[*].title RETURN document
为了模拟一个ArrayList,但这并不返回任何结果。我想使用一堆单独的String进行查询,但数量太多了,当使用这么长的String进行查询时,Java驱动程序会出错。因此,我必须使用Array或ArrayList进行查询。
categoriesArray的示例:
["Politics", "Law", "Nature"]
数据库的示例图像:
2条答案
按热度按时间68de4m5k1#
原因是
IN
运算符的工作方式是在右侧数组的每个成员中搜索其左侧的值。对于下面的查询,如果“Politics”是
document.categories[*].title
的成员,则此查询有效:但是,即使“Politics”是
document.categories[*].title
的成员,以下查询也不起作用:这是因为它将在右侧的每个成员中搜索
[ "Politics", "Law" ]
的确切值,而该值将不存在。您可能要查找的是分别查找"Politics"
和"Law"
的比较,例如:0x6upsns2#
Arango还(现在)具有数组比较运算符,允许搜索
ALL IN
、ANY IN
或NONE IN
因此,您现在可以按以下条件进行筛选: