1

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

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

我应该如何实施呢?

4

2 回答 2

2

如果不触发_update处理程序,现在就无法做到这一点。这是跟踪文档更改时间的好主意,但它面临复制问题。

复制工作在公共 API 之上,这意味着:

  1. 如果强制执行此类触发器,您将破坏复制,因为在没有文档修改的情况下将无法同步数据。由于文档被修改,他会收到新的修订,如果您以连续模式将数据从数据库 A 复制到 B 和 B 到 A,则很容易导致死循环。
  2. 在其他情况下,当复制被修复时,总会有办法解决您的触发器。
于 2013-04-24T16:50:48.450 回答
-1

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

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

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

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

于 2013-04-24T17:13:15.983 回答