繁体   English   中英

ArangoDB字符串查询列表

[英]ArangoDB Query List for Strings

我对ArangoDB相对陌生,在阅读了文档之后,我试图为一个新项目实现它。

我有一个文档集合,每个文档中都有一个列表,其中包含许多术语。 我正在使用Java驱动程序,并想查询其列表与我拥有的列表中的任何元素匹配的文档。

例:

Document 1
{
    tokens["blue", "red", "green"]
}

Document 2
{
    tokens["black", "red", "yellow"]
}

myArrayList:
["purple", "red"]

由于我要查询的ArrayList包含单词“ red”,因此我应该同时看到文档1和文档2。理想情况下,我只会看到文档ID和匹配的颜色。

根据我对AQL的了解,使用半伪代码:

FOR document IN documents FILTER document.tokens CONTAINS myArrayList RETURN document.token.color && document._id

通常,我一直在返回整个文档对象,然后仅访问所需的内容。 如果更简单,我可以这样做。 例如:

FOR document IN documents FILTER document.tokens CONTAINS myArrayList RETURN document

我建议使用IN运算符进行过滤,如下所示:

FOR document IN documents
  FILTER document.tokens IN @myArrayList
  RETURN document

仅当tokens属性是一个数组并且包含@myArrayList绑定参数中包含的任何值时,才返回文档。

我在ArangoDB Google网上找到了我的问题的答案。 我正在链接到它,因为这对我来说很难找到解决方案:h ttps://groups.google.com/forum/#!newtopic / arangodb / arangodb / fen4Nr7N4Uo

我已经修改了那里的代码以适合我的情况:(感谢stj的评论来修复我写的内容)

FOR document IN documents LET contains = 
(FOR color IN document.tokens FILTER MATCHES(color, @myArrayList) RETURN color)
FILTER LENGTH(contains) > 0 RETURN document

如果要以任何顺序查找至少包含所有指定颜色的文档,则可以使用如下查询:

LET lenArrayList = LENGTH(@myArrayList)

FOR doc IN documents
    FILTER HAS(doc, "tokens") // avoid bad calls to INTERSECTION()
    FILTER LENGTH(INTERSECTION(@myArrayList, doc.tokens)) == lenArrayList
    RETURN doc

myArrayList: ["yellow","red"]

结果:文档2,因为它包含红色和黄色。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM