У меня есть несколько документов в MarkLogic, все они принадлежат одной коллекции. Я создал шаблон, чтобы было создано представление, и записи документов можно было запрашивать через это представление. Однако MarkLogic поддерживает запросы к представлениям только через SQL или OpticAPI. Я хочу запросить представление через REST API. Как такое возможно?
Допустим, мои документы находятся по пути /employee//UUID.json.
Вот как был создан один документ и какие данные он содержит:
declareUpdate();
xdmp.documentInsert("/employee/1586502/981723ioewqhdijsaduih3q8yeuiqwhdeqw.json",
{
"EmployeeID": "1234567",
"EmployeeName": "Lorem Ipsum",
"JoiningDate": "2018-07-01"
},
xdmp.defaultPermissions(),
[
"EmployeeRecordCollection"
])
Ниже приведено определение шаблона:
'use strict'
var tde = require("/MarkLogic/tde.xqy");
var EmployeeRecordTDE = xdmp.toJSON(
{
"template": {
"context": "/",
"collections": ["EmployeeRecordCollection"],
"rows": [
{
"schemaName": "employees",
"viewName": "EmployeeRecordView",
"columns": [
{
"name": "employeeId",
"scalarType": "string",
"val": "EmployeeID"
},
{
"name": "rateType",
"scalarType": "string",
"val": "EmployeeName",
},
{
"name": "startDate",
"scalarType": "string",
"val": "JoiningDate"
}
]
}
]
}
}
);
tde.validate(
[EmployeeRecordTDE]
);
tde.nodeDataExtract(
[fn.collection(["EmployeeRecordCollection"])],
[EmployeeRecordTDE]
);
tde.templateInsert(
"/employee/EmployeeRecordTDE.json" ,
EmployeeRecordTDE,
xdmp.defaultPermissions(),
["EmployeeRecordCollection"]
)
Приведенный выше шаблон создает представление с именем «EmployeeRecordView», которое можно запросить с помощью SQL как:
select * from EmployeeRecordView where...;
Его можно преобразовать в план с помощью OpticAPI в Javascript как:
declareUpdate();
const op = require('/MarkLogic/optic');
const EmployeePlanSQL =
op.fromSQL("select * from EmployeeRecordView")
const planObj = EmployeePlanSQL.export();
xdmp.documentInsert("emplRatePlanSQL.json", planObj);
op.import(cts.doc('emplRatePlanSQL.json').toObject())
.result();
Я подумал, может быть, я смогу использовать этот план для предоставления REST API в MarkLogic, чтобы у меня не было запросов на сохранение в коде моего приложения. MarkLogic действительно предоставляет способ для этого, НО все определение плана должно быть передано как запрос в REST API, что снова нежелательно.
http://localhost:8040/v1/rows?plan=...
Также большое желание - не держать запросы в коде приложения. Есть ли способ представить этот план как REST API через функцию JS в MarkLogic или какой-либо другой подход?