
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")