Создайте копию документа в SQL API CosmosDB перед обновлением - PullRequest
0 голосов
/ 04 января 2019

В Cosmos DB с SQL API мне нужно сделать копию документа JSON из бэкэнда (USP с кодом JavaScript), прежде чем новая версия того же документа будет перезаписана API. Эта копия должна иметь свой тег свойства 'Latest' до 'false'

  1. Попытка создать SP, который создает копию документа перед обновлением, но я не могу создать копию документа, поскольку выдается ошибка, говорящая, что метод getBody () является анонимным
  2. Пытался создать предварительный триггер, который создает копию документа, но триггер не срабатывал, так как я запускаю код на портале Azure
  3. Я могу использовать getBody () в UDF или отдельном USP, но их нельзя вызывать из моего базового USP, так как это не разрешено

function ChangeDocument(AId) {
var context = getContext();
var coll = context.getCollection();
var link = coll.getSelfLink();
var response = context.getResponse();
var doc = getContext().getRequest().getBody();
var ts = new Date();
var time = ts.getTime().toString();
var idNew = doc.id + time;
var oldDoc = docs[0]
var historyDoc = {
    "id": idNew,
    "Content": oldDoc.Content
};
coll.createDocument(link, historyDoc, function (err, docCreated) {
    if (err) {
        throw new Error('Error: ' + err.message);
    }
});
doc.AuditFields.Latest = false;
var replace = coll.replaceDocument(doc._self, doc, {},
    function (err, newdoc) {
        if (err) throw err;
        response.setBody(newdoc);
    });
if (!replace) {
    throw new Error('The document could not be updated.');
}
}

Моя цель -

  1. JavaScript для создания копии старого документа с возможностью изменения свойств
  2. Обновите документ с помощью хранимой процедуры, запустив ее на портале Azure
  3. Я буду повышать этот код для выполнения массового импорта / обновления в конечном итоге
...