
AccessPlan.prototype.facetBy( keys as columnIdentifier[], [counter as columnIdentifier?] ) as ModifyPlan
This method counts values for multiple grouping key columns.
The method produces the same output as a prototype.groupToArrays function with single-column groups and a count aggregate.
| Parameters | |
|---|---|
| keys |
This parameter specifies the list of column keys for performing counts.
For each column, the operation determines the unique values of that column and
produces a separate count for the rows with that value.
A column can be named with a string or a column function such as op.col, op.viewCol, or op.schemaCol, or constructed from an expression with the op.as function. The facet can be named by providing a op.namedGroup that takes exactly one column. |
| counter |
Specifies what to count over the rows for each unique value of each key column.
By default, the operation counts the rows. To count the values of a column instead, specify the column to count with this parameter. To count documents, specify a fragment id column with op.fragmentIdCol. |
The op.facetBy function is a convenience for executing
a prototype.groupToArrays equivalent to:
function facetBy(rowQuery, keys, counter) {
return rowQuery.groupToArrays(keys, op.count('count', counter));
}
// Calculate the total expenses separately for each category and for each location.
const op = require('/MarkLogic/optic');
op.fromView('main', 'expenses')
.facetBy(['Category', 'Location'])
.result();
// Filter the category and location facets by different criteria.
const op = require('/MarkLogic/optic');
const expenses = op.fromView('main', 'expenses');
const catFacet =
expenses
.where(op.eq(op.col('Location'), 'New York'))
.facetBy(op.namedGroup('Categories', 'Category'));
const locFacet =
expenses
.where(op.eq(op.col('Category'), 'Payroll'))
.orderBy(op.desc('Amount'))
.limit(10)
.facetBy(op.namedGroup('Locations', 'Location'));
catFacet
.joinCrossProduct(locFacet)
.result();
Stack Overflow: Get the most useful answers to questions from the MarkLogic community, or ask your own question.