Optic api 如何执行列表中的位置?

问题描述 投票:0回答:1

我有以下使用

op:from-view
的 XQuery 代码。 在
op:where
部分中,我尝试选择一个可以等于值列表的列。 当我使用像
 op:eq(op:col("client"), $client1)
这样的一个值时,它工作得很好。 但是我需要它来选择
($client1, $client2)
。 我怎么做? 我似乎在任何地方都找不到例子。 谢谢。

marklogic marklogic-optic-api
1个回答
1
投票

Optic 目前没有 in() 运算符,因此必须将条件传递给 Optic as

op:or((op:eq(op:col("client"), $client1), op:eq(op:col("client"), $client2)))

为了减少繁琐,一种可能是利用构建时表达式,如下所示:

op:or(
    let $col := op:col("client")
    for $val in ($client1, $client2)
    return op:eq($col, $val)
    )

或者将该表达式包装在辅助函数中:

declare function local:in($colName as xs:string, $vals) {
    op:or(
        let $col := op:col($colName)
        for $val in ($vals)
        return op:eq($col, $val)
        )
};

并按如下方式使用它:

op:where(
    local:in("client", ($client1, $client2))
    )

希望有帮助,

© www.soinside.com 2019 - 2024. All rights reserved.