Reputation: 1510
We have a list of URIs and which we need to read in the sequence in which it is passed.
Example1
doc(("/doc1", "/doc2", "/doc3"))
above function should return the content of "/doc1" then "/doc2" and then "/doc3" but it is not happening.
The same thing is happening is with the below query also.
Example2
cts:search(doc(), cts:document-query((("/doc1"),("/doc2"),("/doc3"))))
What will be the solution if I want to read the documents in which sequence I pass the URIs ?
Any help is appreciated..!
Upvotes: 2
Views: 67
Reputation: 506
@grtjn's answer is correct but you could reduce it to one database query and just return the docs in the order that you want with something like
let $uris := ("/doc2", "/doc1", "/doc3")
let $docs := map:new(
fn:doc($uris) ! map:entry(xdmp:node-uri(.), .)
)
for $i in $uris
return map:get($docs, $i)
Upvotes: 4
Reputation: 20414
cts:search
has its own ordering functionality, which you can trigger using functions like cts:index-order
. fn:doc
takes an array, and will return them in database order. Neither of them sounds like what you are trying to achieve.
I would suggest explicitly iterating over the uris, and fetching the uris one by one. You could use !
operator for this, for instance:
("/doc1", "/doc2", "/doc3") ! doc(.)
HTH!
Upvotes: 5