[MarkLogic Dev General] Sorting and De-duping

Kari Cowan KCowan at alm.com
Fri Jul 31 09:32:24 PDT 2015


If you're curious, this was the final working version of the snippet.  The distinct-values function was giving me an error until I cast the return as a string.

Thanks for the tips.  Is there a tutorial for map:map or just RTFN?


xquery version "1.0-ml"; 
declare namespace ec = "http://www.alm.com/event-calendar";

let $directory:="/data-sources/editorial-calendar/"
let $future-calendar-docs:= 
cts:search(
  xdmp:directory($directory),                                        
  cts:and-query((
    cts:element-attribute-range-query(xs:QName("ec:MaterialsDueDate"), xs:QName("date"), ">=", xs:date(fn:current-date()) ),
    cts:element-query(xs:QName("ec:approval_status"),cts:word-query("true"))
  ))
) 
 
for $audience in fn:distinct-values($future-calendar-docs//ec:audience)
order by $audience
return xs:string($audience)



-----Original Message-----
From: general-bounces at developer.marklogic.com [mailto:general-bounces at developer.marklogic.com] On Behalf Of Kari Cowan
Sent: Thursday, July 30, 2015 1:59 PM
To: MarkLogic Developer Discussion <general at developer.marklogic.com>
Subject: Re: [MarkLogic Dev General] Sorting and De-duping

Thanks.  I haven't worked with the map function yet.  I was trying to use distinct-values in the for loop, but get an error that my value isn't a node (which is true)

for $audience in xs:string(fn:distinct-values($these-docs//ec:audience))
order by $audience
return $audience/fn:string()

>> [1.0-ml] XDMP-NOTANODE: (err:XPTY0019) $audience/fn:string(.) -- 
>> "Automotive" is not a node

How would I map this a cts search?

xquery version "1.0-ml";
declare namespace ec = "http://www.alm.com/event-calendar";
let $directory:="/data-sources/editorial-calendar/"
let $these-docs:=
cts:search(
  xdmp:directory($directory),                                        
  cts:and-query((
    cts:element-attribute-range-query(xs:QName("ec:MaterialsDueDate"), xs:QName("date"), ">=", xs:date(fn:current-date()) ),
    cts:element-query(xs:QName("ec:approval_status"),cts:word-query("true"))
  ))
) 

for $audience in $these-docs//ec:audience order by $audience  return $audience/fn:string()



-----Original Message-----
From: general-bounces at developer.marklogic.com [mailto:general-bounces at developer.marklogic.com] On Behalf Of Christopher Hamlin
Sent: Thursday, July 30, 2015 12:46 PM
To: MarkLogic Developer Discussion <general at developer.marklogic.com>
Subject: Re: [MarkLogic Dev General] Sorting and De-duping

Just to look ahead a little to that next question: fn:distinct-values says "The order in which the sequence of values is returned is implementation dependent."

One way to maintain order is to go through your values in order, only pass the ones that haven't been seen.  map:map is useful for that kind of side effect.
_______________________________________________
General mailing list
General at developer.marklogic.com
Manage your subscription at: 
http://developer.marklogic.com/mailman/listinfo/general



_______________________________________________
General mailing list
General at developer.marklogic.com
Manage your subscription at: 
http://developer.marklogic.com/mailman/listinfo/general





More information about the General mailing list