我正在尝试使用 marklogic 中的 Xquery optic lib 根据此条件过滤文档。但 op:sql-condition 似乎没有按预期工作。
op:sql-condition("Employee.employeeName LIKE '%JOHN%' AND Employee.employeeName LIKE '%Smith%' AND Employee.employeeName LIKE '%Eric%'")
使用这个条件,我希望获得包含这些员工姓名的所有文档,但它只返回条件中的第一个文档。在这种情况下,它是约翰。
如何更新此查询以使用具有多个条件的 AND?
根据开发者文档:
...过滤器定义不能在光学布尔表达式中使用,但必须是 WHERE 调用的唯一参数。
进一步:
条件必须是表示为字符串的有效简单 SQL 布尔表达式。
所以这意味着:SQL 表达式中没有布尔运算,而只是布尔结果。
可以连接多个where条件,实现它们之间的“与”运算。我对文档页面中的示例进行了一些扩展以表明:
xquery version "1.0-ml";
import module namespace op="http://marklogic.com/optic" at "/MarkLogic/optic.xqy";
op:from-literals((
map:entry("id", 1) => map:with("name", "Master 1") => map:with("date", "2015-12-01"),
map:entry("id", 2) => map:with("name", "Master 2") => map:with("date", "2015-12-02"),
map:entry("id", 3) => map:with("name", "Master 3") => map:with("date", "2015-12-03"),
map:entry("id", 4) => map:with("name", "Master 4") => map:with("date", "2015-12-04")))
=> op:where(op:sql-condition("id BETWEEN 0.5 AND 3.5"))
=> op:where(op:sql-condition("id > 2"))
=> op:result()
这会给出 ID 为 3 的条目,因为它的 ID 介于 0.5 和 3.5 之间并且大于 2。您也应该能够将其应用于三个单独的类似语句。