为cloudant中的文档中发生的更改创建审计跟踪记录的正确方法是什么。需要创建一个单独的文档,其中包含任何可区分的文档类型(如审计),记录任何文档中发生的更改(更新,删除等)。
观察到名为更新处理程序的内容,但这听起来更像是在数据库中推送文档之前使用某些内部字段(如时间戳)更新文档的方法。
从关系数据库中进行类比,需要一个与表的UPDATE和DELETE操作相关联的触发器,并在AUDIT_TABLE中创建一个单独的记录,记录当前事务中更改的列。
答案 0 :(得分:4)
虽然Cloudant会保留每个文档的修订历史记录,但不应将其用作版本控制系统,因为在修改过程中会定期删除旧修订版的主体。
一种方法是在数据库中采用“只写”模式。假设您的文档如下所示:
ProjectB
每次要创建文档“abc123”的新版本时,只需使用新时间戳(ts)将新文档插入同一数据库即可。
{
"_id": "<autogeneratedid>",
"_rev: "<autogeneratedrev>",
"ref": "abc123",
"ts": 1464074759315,
"status": "provisional",
"name": "the name",
"body": "## document body"
}
然后我们可以在Cloudant中创建secondary index,以便我们检索文档的最新版本:
{
"_id": "<autogeneratedid>",
"_rev: "<autogeneratedrev>",
"ref": "abc123",
"ts": 1464074866595,
"status": "live",
"name": "the new name",
"body": "## new document body"
}
这会创建一个关键字为function(doc) {
emit([doc.ref, doc.ts], null);
}
的视图,因此当我们想要获取文档的最新版本时,我们可以查询此视图:
[doc.ref, doc.ts]
获取具有最新时间戳的版本。