CouchDB:自动更新字段

时间:2013-04-24 16:15:24

标签: couchdb

在我的CouchDB数据库中,我希望所有文档在更改时都添加'updated_at'时间戳(并强制执行)。

  • 我无法使用validation函数
  • 修改文档
  • updates函数将无法运行,除非它们被专门调用(因此可以更新文档而不调用特定的更新函数)

我应该如何实施?

2 个答案:

答案 0 :(得分:2)

如果不触发_update处理程序,就无法执行此操作。这是跟踪文档更改时间的好主意,但它面临复制问题。

复制正在公共API上运行,这意味着:

  1. 如果执行此类触发器,您将无法复制数据,因为无法在没有文档修改的情况下同步数据。由于文档被修改,他会收到新版本,如果您以连续模式将数据从数据库A复制到B而B到A,则可能很容易导致死循环。
  2. 在其他情况下,当复制被修复时,将始终有办法解决您的触发器。

答案 1 :(得分:0)

我可以建议一个解决方法 - 您可以创建一个视图,将当前日期作为键(或其一部分)发出:

function( doc ){
  emit( new Date, null );
}

一旦视图生成被触发(这在首次请求之后发生),这将为所有文档分配当前日期,并将在特定文档的每次更新时重新分配新日期。

虽然以上内容可以解决您的问题,但我建议不要使用它,原因是 Kxepal 已经解释过:如果您在复制的网络上,每个节点都会分配自己的日期。因此,考虑到这一点,我建议的最好的方法是在客户端解决问题,并发布已嵌入日期的文档。