Нам нужно обновить все документы в коллекции, чтобы изменить их форму. Мы хотели бы записать аудит изменения в другую коллекцию, где мы будем хранить документ, содержащий старую и новую версии. Чтобы сделать это изменение атомарным, мы используем хранимую процедуру.
Проблема, с которой мы сталкиваемся, заключается в обновлении другой коллекции из сохраненного процесса. Кажется, что документ аудита всегда записывается в коллекцию, к которой принадлежит хранимый процесс.
Я написал образец хранимой процедуры:
function sample(prefix) {
var context = getContext();
var fooCollection = context.getCollection();
var barCollection = context.getCollection("BarCollection");
// Query documents and take 1st item.
var isAccepted = fooCollection.queryDocuments(
fooCollection.getSelfLink(),
'SELECT * FROM root r',
function (err, feed, options) {
if (err) throw err;
// Check the feed and if empty, set the body to 'no docs found',
// else take 1st element from feed
if (!feed || !feed.length) context.getResponse().setBody('no docs found');
else {
var fooDoc = feed[0];
var barDoc = {
"foo" : fooDoc,
"bar" : "bar"
}
var isAccepted2 = barCollection.createDocument(barCollection.getSelfLink(), barDoc);
if (!isAccepted2) throw new Error('The query was not accepted by the server.');
}
});
if (!isAccepted) throw new Error('The query was not accepted by the server.');
}
В этом примере моя сохраненная процедура сохраняется в файле FooCollection. Я получаю документ и пытаюсь сохранить копию в папку BarCollection. Новый документ всегда сохраняется в папке FooCollection.
Поддерживается ли этот сценарий в Document DB? Если да, то какие изменения мне нужно сделать, чтобы хранимый процесс заработал?