Как использовать fn: начинается-с () и fn: заканчивается-с () с cts: uris () - PullRequest
3 голосов
/ 25 февраля 2020

Мое требование: я хочу вернуть URI документа, только если значение индекса диапазона пути начинается с или заканчивается каким-то словом.

Согласно документации MarkLogi c я могу использовать только ">, <, <=,> =, =,! = "для сравнения значения индекса диапазона пути, но в моем требовании я хочу использовать fn: start-with () или fn: end-with ().

Is Есть ли способ удовлетворить это требование?

1 Ответ

5 голосов
/ 25 февраля 2020

Вы можете использовать cts:value-match() с подстановочными символами в начале и в конце, чтобы найти все значения, начинающиеся с и заканчивающиеся значением.

Затем используйте cts:path-range-query() с этими значениями в вызове cts:uris()

let $path := "/doc/foo";
let $word := "bar";
(: find the values that start with and end with the $word :)
let $values-starts-and-ends-with := (
  cts:value-match(cts:path-reference($path), $word||"*"), 
  cts:value-match(cts:path-reference($path), "*"||$word)
) 
(: use those values to find the URIs of docs with those values at that path :)
cts:uris("", (), cts:path-range-query($path, "=", $values-starts-and-ends-with))
...