我想创建一个post触发器,以便在有人修改文档时将旧内容保存到另一个文档。我真的没有在互联网上找到很多关于DocumentDB触发器的示例代码,所以我希望我能在这里得到一些帮助......
如果在SQL Server中,我将在UPDATE上创建After触发器并使用Inserted和Deleted临时表来跟踪表修改历史记录。
例如,在SQL中它将是
Insert Into TableToStoreHistory
Select {some columns} From inserted i JOIN deleted d
ON i.id = d.id
我知道在DocumentDB中,java脚本代码将完全不同。我希望自己能先拿出一些代码。但是,我没有找到一个更接近的示例,显示如何在DocumentDB post触发器中执行此操作。
假设我的文件定义如下:
文件A
{
"id": "1",
"content": "Hello World!"
}
当有人修改文档A时,我希望将后置触发器写入另一个文档。旧内容将写入文档B,如下所示
{
"id": {assign some other id maybe "1_date&time"},
"oldContent": "HelloWorld"
}
有人可以帮忙吗?
非常感谢!
答案 0 :(得分:0)
我所知道的触发器的最佳讨论和示例可以在这里找到:https://azure.microsoft.com/en-us/documentation/articles/documentdb-programming/
我建议阅读所有内容,但您可以跳到"数据库触发器"看一个例子。
答案 1 :(得分:0)
您可以编写一个Pre-trigger,它接收传入的请求正文并插入如下所示的附加文档
function() {
var collection = getContext().getCollection();
var collectionLink = collection.getSelfLink();
var doc = getContext().getRequest().getBody();
var ts = new Date();
var time = ts.getTime().toString();
var idNew = doc.id + time;
var newDoc = { id: idNew, oldContent: doc.content };
collection.createDocument(collection.getSelfLink(), newDoc, function(err, docCreated) {
if(err) { throw new Error('Error: ' + err.message); } \r\n"
});
}
此触发器应作为更新请求的一部分运行。
答案 2 :(得分:0)
我通过借用Shireesh的想法来解决这个问题。
要将旧内容保存到另一个文档中,您需要预先触发,并且需要在实际执行Replace操作之前查询文档。以下是我的代码:
function ResourceAuditHistory() {
var collection = getContext().getCollection();
var collectionLink = collection.getSelfLink();
var doc = getContext().getRequest().getBody();
var ts = new Date();
var time = ts.getTime().toString();
var idNew = doc.id + time;
var Query = 'SELECT * From c Where c.id = "' + doc.id +'"';
var accept = collection.queryDocuments(collection.getSelfLink(), Query, updateMetadataCallback);
function updateMetadataCallback(err, documents, responseOptions) {
if (err) throw new Error("Error" + err.message);
if (documents.length != 1) throw 'Unable to find metadata document';
var oldDoc = documents[0];
var historyDoc =
{
"id": idNew,
"Content": oldDoc.Content
};
collection.createDocument(collectionLink, historyDoc, function (err, docCreated) {
if (err) { throw new Error('Error: ' + err.message); }
});
}