MarkLogic 12 Product Documentation
AccessPlan.prototype.transformDoc

AccessPlan.prototype.transformDoc(
   transformDocCol as ColumnIdentifier,
   transformDef as Object
) as ModifyPlan

Summary

This function applies a transformation to a column that contains documents. This transform module needs to be stored in the modules database.

Parameters
transformDocCol This is the column which contains the document to transform. The 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.
transformDef This is an object. The 'kind' property of the schema object must be 'mjs'(the default), or 'xslt'. The 'path' property specifies the main module in the modules database. The 'params' property specifies parameter values passed to the main module. (refer to xdmp.invoke and xdmp.xsltInvoke).

See Also

Example

const op = require('/MarkLogic/optic');
op.fromDocUris(['/test/0.json', '/test/1.json'], 'view')
  .joinDocCols(op.docCols('view'), op.viewCol('view', 'uri'))
  .transformDoc(op.viewCol('view','doc'), {"path":"/transformDoc-test.mjs", kind:"mjs", params:{myParam:'my new content'}})
  .orderBy('uri')
  .result()

/* transformDoc-test.mjs
const result = {
    "hello": "world",
    "yourParam": external.myParam,
    "theDoc": external.doc
}
result
*/
  

Example

declareUpdate();
const op = require('/MarkLogic/optic');
const rows = [
    {id:1, doc:{"doc":1}, uri:'/optic/update/write11.json'},
    {id:2, doc:{"doc":2}, uri:'/optic/update/write12.json'},
    {id:3, doc:{"doc":3}, uri:'/optic/update/write13.json'}
    ];
const colTypes = [
    {"column":"id",  "type":"integer", "nullable":false},
    {"column":"doc", "type":"none",  "nullable":false},
    {"column":"uri", "type":"string",  "nullable":false},
    ];
const fromParam = op.fromParam('bindings', null, colTypes);
const fromLiteral = op.fromLiterals([
        {id:1, val:'patch1'},
        {id:2, val:'patch2'}
        ])
fromParam
  .joinInner(fromLiteral)
  .orderBy('id')
  .transformDoc('doc', {"path":"/transformDoc-test-two-params.mjs", kind:"mjs",
                  params:{patch1:op.col('id'), patch2:op.col('val')}})
  .write({uri:'uri', doc:'doc'})
  .result('object',{'bindings': rows});

/* transformDoc-test-two-params.mjs
const result = {"hello": "world",
"Patch1": external.patch1,
"Patch2": external.patch2,
"theDoc": external.doc}
result
*/
  

Example

const op = require('/MarkLogic/optic');
const fromDocUris = op.fromDocUris(cts.documentQuery(["/optic/update/write7.xml", "/optic/update/write8.xml", "/optic/update/write9.xml"]),
                                  'left')
const fromLiteral = op.fromLiterals([
        {uri:"/optic/update/write7.xml", val:'patch1'},
        {uri:"/optic/update/write8.xml", val:'patch2'}
        ],'right')
fromDocUris
  .joinDoc(op.viewCol('left',"doc"), op.viewCol('left',"uri"))
  .joinInner(fromLiteral)
  .where(op.eq(op.viewCol('left',"uri"), op.viewCol('right',"uri")))
  .orderBy(op.viewCol('left','uri'))
  .transformDoc(op.viewCol('left',"doc"), {"path":"/transformDoc-test.xslt", "kind":"xslt", params:{myParam:op.viewCol('right','val')}})
  ..result()
  

Example

const op = require('/MarkLogic/optic');
const fromDocUris = op.fromDocDescriptors([
  {uri:'/test/fromDocUris/0.json', doc:{'doc':'doc0'}},
  {uri:'/test/fromDocUris/1.json', doc:{'doc':'doc1'}}], 'left')
const fromLiteral = op.fromLiterals([
        {uri:'/test/fromDocUris/0.json', id:0, val:'content0'},
        {uri:'/test/fromDocUris/1.json', id:1, val:'content1'},
        {uri:'/test/fromDocUris/5.json', id:5, val:'content5'}
        ], 'right')
fromDocUris
  .joinInner(fromLiteral, op.on(op.viewCol('left','uri'), op.viewCol('right','uri')))
  .transformDoc(op.viewCol('left', 'doc'), {"path":"/transformDoc-test-two-params-array.mjs", kind:"mjs",
                    params:{patch1:op.viewCol('left','uri'), patch2:op.viewCol('right','val')}})
  .orderBy(op.viewCol('left','uri'))
  .result()

/* transformDoc-test-two-params-array.mjs
const result = [
{"Patch1": external.patch1,"theDoc": external.doc},
{"Patch2": external.patch2,"theDoc": external.doc}
]
result
*/
  

Example

const op = require('/MarkLogic/optic');
const fromDocUris = op.fromDocDescriptors([
  {uri:'/test/fromDocUris/0.json', doc:{'doc':'doc0'}},
  {uri:'/test/fromDocUris/1.json', doc:{'doc':'doc1'}}], 'left')
const fromLiteral = op.fromLiterals([
        {uri:'/test/fromDocUris/0.json', id:0, val:'content0'},
        {uri:'/test/fromDocUris/1.json', id:1, val:'content1'},
        {uri:'/test/fromDocUris/5.json', id:5, val:'content5'}
        ], 'right')
fromDocUris
.joinInner(fromLiteral, op.on(op.viewCol('left','uri'), op.viewCol('right','uri')))
.transformDoc(op.viewCol('left', 'doc'), {"path":"/transformDoc-test-two-params-sequence.mjs", kind:"mjs",
                  params:{patch1:op.viewCol('left','uri'), patch2:op.viewCol('right','val')}})
.orderBy(op.viewCol('left','uri'))
.result()

/* transformDoc-test-two-params-sequence.mjs
const result1 = {"hello": "world",
"Patch1": external.patch1,
"theDoc": external.doc}
const result2 = {"hello": "world",
"Patch2": external.patch2,
"theDoc": external.doc}
Sequence.from([result1,result2])
*/
  
Powered by MarkLogic Server | Terms of Use | Privacy Policy