op:reduce( $plan as map:map, $reducer as function(item()*, item()) as item()*, [$seed as item()*] ) as map:map
This method applies a function or the builtin reducer to each row returned
by the plan to produce a single result as with the reduce()
method of
JavaScript Array.
The signature of the reducer must be function(previous, row)
,
where previous
is the seed on the first request and the return from the
previous call on subsequent request and row
is the current row.
The implementation of a op:reduce
function
can call op:map
functions to chain map calls with reduce calls.
xquery version "1.0-ml"; import module namespace op="http://marklogic.com/optic" at "/MarkLogic/optic.xqy"; let $employees := op:from-view("main", "employees") return $employees => op:select("EmployeeID") => op:order-by("EmployeeID") => op:reduce(function($previous as json:array, $row as map:map) as json:array { let $i := json:array-size($previous) return json:array-with( $previous, map:with($row, "foo", $i) => map:with("bar", switch($i) case 0 return 0 case 1 return 1 default return map:get($previous[$i - 1], "bar") + map:get($previous[$i], "bar")) ) }, json:array()) => op:result("value")
Stack Overflow: Get the most useful answers to questions from the MarkLogic community, or ask your own question.