
ModifyPlan.prototype.where( filterExpression as filterDefinition ) as ModifyPlan
This method restricts the row set to rows matched by the boolean expression. Use boolean composers such as op.and and op.or to combine multiple expressions.
A constraining document query returns only the rows from the matched source documents. If the constraining document query is a node instead of a cts.query object, the implementation calls the cts.query parser on the node. The constraining document query applies to all upstream accessors. A constraining sem.store returns only the triples from the specified store (potentially expanded by inference using a ruleset). A constraining sem.store applies to all upstream triples accessors.
| Parameters | |
|---|---|
| filterExpression | This can be a boolean expression, a cts.query to qualify the source documents that produced the rows set, or (where part of the row set was produced by the op.fromTriples accessor) a sem.store to restrict or expand the triples that produce the row set. |
where is a method of the following classes:
// Locate employee expenses that exceed the allowed limit
const op = require('/MarkLogic/optic');
const employees = op.fromView('main', 'employees');
const expenses = op.fromView('main', 'expenses');
const expenselimit = op.fromView('main', 'expenselimit');
const Plan =
employees.joinInner(expenses, op.on(employees.col('EmployeeID'), expenses.col('EmployeeID')))
.joinInner(expenselimit, op.on(expenses.col('Category'), expenselimit.col('Category')))
.where(op.gt(expenses.col('Amount'), expenselimit.col('Limit') ))
.select([employees.col('EmployeeID'), 'FirstName', 'LastName', expenses.col('Category'),
expenses.col('Amount'), expenselimit.col('Limit') ])
.orderBy(employees.col('EmployeeID'))
Plan.result();
// Insert the template for view "docWhereExample"
declareUpdate();
const tde = require("/MarkLogic/tde.xqy");
const template = {
"template":{
"context":"/",
"collections": ["docWhereExample"],
"rows":[
{
"schemaName":"docWhereExample",
"viewName":"docWhereExample",
"columns":[
{
"name":"id",
"scalarType":"long",
"val":"./id"
},
{
"name":"name",
"scalarType":"string",
"val":"./name"
}
]
}
]
}
}
tde.templateInsert("docWhereTemplate.json", template);
//Insert documents
declareUpdate();
const docs = [{
uri: "john.json",
id : 1,
name: "john",
sentence : "John is there"
},
{
uri: "joe.json",
id : 1,
name: 'joe',
sentence : "Joe was there"
},
{
uri: "alice.json",
id : 2,
name: 'alice',
sentence : "Alice was there"
},
];
for ( let doc of docs ) {
xdmp.documentInsert(doc.uri, doc, {collections:"docWhereExample"})
}
//Below query returns "joe"
const op = require('/MarkLogic/optic');
op.fromView('docWhereExample', 'docWhereExample')
.where(op.eq(op.col("id"),1))
.where(cts.jsonPropertyWordQuery("sentence","was"))
.select(["name"])
.result();
Stack Overflow: Get the most useful answers to questions from the MarkLogic community, or ask your own question.