问题
I have to fetch all documents from a directory and am using below query to do same. Now i need to return the result which is sorted based on the effectiveDate element.Can we use order by along with this code
let $news :=xdmp:directory("/news/","1")
for $d in $news
return $d
-- Result -----
<?xml version="1.0" encoding="UTF-8"?>
<NewsEntity xmlns="http://jnj.com/news">
<uuid xmlns="">868e8a3a-058d-4b2d-8d69-0696f75ec97f</uuid>
<headLine>HeadLine 4</headLine>
<contributor>User 4</contributor>
<effectiveDate>2016-08-31</effectiveDate>
</NewsEntity>
<?xml version="1.0" encoding="UTF-8"?>
<NewsEntity xmlns="http://jnj.com/news">
<uuid xmlns="">311eeede-2560-4142-b882-b666ab08c9f8</uuid>
<headLine>HeadLine 3</headLine>
<contributor>User 3</contributor>
<effectiveDate>2016-08-28</effectiveDate>
</NewsEntity>
<?xml version="1.0" encoding="UTF-8"?>
<NewsEntity xmlns="http://jnj.com/news">
<uuid xmlns="">9bb67977-a217-425f-82e4-b4366e80d7c4</uuid>
<headLine>HeadLine 2</headLine>
<contributor>User 2</contributor>
<effectiveDate>2016-08-30</effectiveDate>
</NewsEntity>
回答1:
If you want results to be sorted efficiently, you will need a date
range index on effectiveDate
. Under certain conditions the query optimizer can leverage that index using order by
clauses, but it might be more straight-forward to use cts:index-order with a cts:search
. Something like:
cts:search(collection(),
cts:directory-query('/news', 1),
cts:index-order(
cts:element-reference(
fn:QName("http://jnj.com/news", "effectiveDate")
"type=date"
)
)
)
More details can be found in the Performance Guide under "Sorting Searches Using Range Indexes"..
HTH!
回答2:
Depending on your usage criteria, you can also use a simpler "order by" expression, which sounds like what you want to do. In this case you have to make sure you point to the effectiveDate element properly, as it's in a namespace.
for $d in xdmp:directory("/news/","1")
order by $d/*:effectiveDate
return $d
来源:https://stackoverflow.com/questions/39225312/order-by-an-element-while-fetching-documents-from-a-directory