У меня есть несколько документов в 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 или каким-либо другим подходом?