
ModifyPlan.prototype.write( [cols as docColsIdentifier?] ) as ModifyPlan
Inserts or overwrites the documents identified by the uri column with the data supplied by the other document descriptor columns.
prototype.write() needs to be run as an update transaction. Use declareUpdate() at the beginning of the module,
or use xdmp.invoke()/xdmp.invokeFunction() with update="true".
By default, this function expects these document descriptor columns: collections, doc,
metadata, permissions, quality, temporalCollection, and uri.
These are the unqualified names defined by op.docCols().
If earlier pipeline steps use different names or qualified column references, pass the cols parameter
to map the expected names above to your actual column names.
If the expected columns are missing or mapped incorrectly, this function can still return a successful response
even when no documents are written.
//write 3 new docs, returns the docs as well
declareUpdate();
const op = require('/MarkLogic/optic');
const docsDescriptor = [
{uri:'/optic/update/write4.json', doc:{"desc":"write4"}},
{uri:'/optic/update/write5.json', doc:{"desc":"write5"}, collections:['write']},
{uri:'/optic/update/write6.json', doc:{"desc":"write6"}, collections:['write', 'write6'], metadata:{'operation':'write6'}}
];
op.fromDocDescriptors(docsDescriptor)
.write(op.docCols())
.result();
//write 3 new docs, returns nothing
declareUpdate();
const op = require('/MarkLogic/optic');
const docsDescriptor = [
{uri:'/optic/update/write7.json', doc:{"desc":"write7"}, collections:['write', 'write7'], metadata:{operation:'write7'}},
{uri:'/optic/update/write8.json', doc:{"desc":"write8"}, collections:['write', 'write8'], metadata:[{'operation':'write8'}], permissions:[xdmp.permission("rest-reader","read"),xdmp.permission("rest-writer","update")]},
{uri:'/optic/update/write9.json', doc:{"desc":"write9"}, collections:['write', 'write9'], metadata:[{operation:'write9'}], permissions:[xdmp.permission("rest-reader","read"),xdmp.permission("rest-writer","update")], quality:9},
];
op.fromDocDescriptors(docsDescriptor)
.orderBy('uri')
.write({uri:'uri', doc:'doc', collections:'collections', metadata:'metadata', permissions:'permissions', quality:'quality'})
.execute();
declareUpdate();
const op = require('/MarkLogic/optic');
const rows = [
{id:1, myQua: 4, o_uri:'/test/fromDocUris/1.json', myUri:'/optic/update/write10.json', myColl:['/optic/write', 'newcol'], meta:'dog'},
{id:2, myQua: 5, o_uri:'/test/fromDocUris/2.json', myUri:'/optic/update/write11.json', myColl:'/optic/write', meta:'cow'},
{id:3, myQua: 6, o_uri:'/test/fromDocUris/3.json', myUri:'/optic/update/write12.json', myColl:'/optic/write', meta:'tiger'}
];
const outputCols = [
{"column":"id", "type":"integer", "nullable":false},
{"column":"myQua", "type":"integer", "nullable":true},
{"column":"o_uri", "type":"string", "nullable":false},
{"column":"myUri", "type":"string", "nullable":false},
{"column":"myColl", "type":"none", "nullable":true},
{"column":"meta", "type":"none", "nullable":true}
];
op.fromParam('bindingParam', null, outputCols)
.joinDoc(op.col('myDoc'), op.col('o_uri'))
.bind(op.as('myMeta',op.jsonObject([op.prop('meta', op.jsonString(op.col('meta')))])))
.bind(op.as('myPerm', op.jsonArray([
op.jsonObject([op.prop('capability', 'read'), op.prop('roleId', xdmp.role('rest-reader'))]),
op.jsonObject([op.prop('capability', 'update'), op.prop('roleId', xdmp.role('rest-writer'))])]))
)
.orderBy('id')
.write({uri:op.col('myUri'), doc:'myDoc', collections: op.col('myColl'), metadata: 'myMeta', quality: op.col('myQua'), permissions:op.col('myPerm')})
.result('object', {"bindingParam":rows});
//write a temporal document '/optic/update/temporal/temporal1.json' with temporal collection 'update'
declareUpdate();
const op = require('/MarkLogic/optic');
const docsDescriptor = [
{uri:'/optic/update/temporal/temporal1.json',
doc:{"desc":"temporal doc 1.1"},
collections:['temporal1', 'write1', 'write1.1'],
metadata:[{'validStart': "2014-04-03T11:00:00", 'validEnd': "9999-12-31T11:59:59Z", 'update': 1}],
permissions:[xdmp.permission("rest-reader","read"),xdmp.permission("rest-writer","read"),xdmp.permission("rest-writer","update")],
quality:11,
temporalCollection:'update'
}
];
op.fromDocDescriptors(docsDescriptor)
.write(null)
.result();
// Overwrite document collections
declareUpdate();
const op = require('/MarkLogic/optic');
const docsDescriptor = [
{uri:'/optic/update/write1.json', collections:['overwrite', 'overwrite10']},
{uri:'/optic/update/write2.json'},
{uri:'/optic/update/write3.json', collections:Sequence.from(['overwrite', 'overwrite12'])}
];
op.fromDocDescriptors(docsDescriptor)
.orderBy('uri')
.write(op.docCols(null, ['uri', 'doc', 'collections']))
.result();
Stack Overflow: Get the most useful answers to questions from the MarkLogic community, or ask your own question.