【问题标题】:ArangoDB Query with multiple OR?具有多个 OR 的 ArangoDB 查询?
【发布时间】:2015-01-10 03:29:03
【问题描述】:

我正在使用 ArangoDB Java 驱动程序并尝试查询包含多个字符串之一的文档,这些字符串存储在列表中的 arangoDB 文档中。我在查询中使用 ArrayList 和字符串列表。

Query:

FOR document IN documents FILTER ( @now - document.dateAdded < 2592000000 ) && 
(document.categories IN @categories || document.tags IN @tags 
|| document.locations IN @locations ) RETURN document

Map<String, Object> bindVars = new MapBuilder().put("now", now).put("categories", categories).put("@tags", tags).put("@locations", locations).get();

“现在”包含一个长字符。所有其他人都是ArrayList&lt;String&gt;. 这是抛出一个错误,解释“bind parameter '@tags' has an invalid value or type”。由于这个 ArrayList 与其他 ArrayList 没有什么不同,我唯一的理论是我输入的逻辑不正确。如何一次查询:

FunctionCondition1 AND (condition2 OR condition3 OR condition4)

【问题讨论】:

  • 你可以试试下面的方法:bindVars = new MapBuilder().put("now", now).put("categories", categories).put("tags", tags).put( "位置", 位置).get();
  • 绑定变量在查询中使用“@”标记,但没有第一个“@”。集合参数用两个 at 指定为“@@myvariablecollection”。在这种情况下,绑定变量是“@myvariablecollection”,并且必须是集合类型。
  • 感谢您的解决方案,您能否发布一个快速的答案,以便我给予您适当的信任?
  • @Jgolden1 你也可以检查这个答案是否被接受? ;-)

标签: arangodb


【解决方案1】:

绑定变量在查询中使用'@' 进行标记,但它们没有第一个'@'。集合参数用两个@@ 符号指定为@@myvariablecollection。在这种情况下,绑定变量是@myvariablecollection,并且必须是集合类型。

例如:

FOR a IN @@collection FILTER a.x == @now RETURN a

要求绑定变量以@collectionnow 的形式给出,其中@collection 必须命名一个集合,now 应该是(在本例中)一个数字。

Map<String, Object> bindVars = new MapBuilder().put("@collection", "myCollection").put("now", 1234).get();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多