我希望你能帮我翻译一下在Java中查询ArangoDB数组值的问题。我尝试过使用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
我能够得到我想要的结果,但是当使用数组或ArrayList时却得不到。
我也尝试查询:
FOR document IN documents FILTER ["Politics","Law] IN document.categories[*].title RETURN document
为了模拟一个ArrayList,但是这并没有返回任何结果。我会使用一堆单独的字符串进行查询,但是数量太多,当使用长度很长的字符串进行查询时,Java驱动程序会出现错误。因此,我必须使用数组或ArrayList进行查询。
categoriesArray的示例:
["Politics", "Law", "Nature"]
一个数据库的示例图像:
LET categories = ["Politics", "Law"]
,LET cat_length = LENGTH(categories)
&FILTER cat_length == LENGTH(INTERSECTION(categories, document.categories[*].title))
,代码看起来更简洁,但不知道性能和内存消耗如何。或者在AQL中是否可能添加对集合的支持?比如FILTER SET(["Politics", "Law"]) IN SET(document.categories[*].title)
。或者在JS中,可以这样做:let arr = ["Law", "Science", "Politics"]; ["Politics","Law"].every(elem => arr.indexOf(elem) != -1)
。AQL中的EVERY()
和SOME()
怎么样?例如:SOME(["Law","Politics"], doc.categories[*].title))
。 - CodeManXEVERY
和SOME
会很有用。我不确定将它们提供为函数是否会提供最直观的语法,但这可能是最简单的方法。 - stj