使用CouchDB进行数据流,或如何检索具有特定修订的文档

时间:2011-11-03 19:18:45

标签: couchdb

想象一下,您希望将修订号用作数据库中文档的状态标志。修订版1用于“原始”文档,修订版2用于某个“已处理”状态,依此类推。那么,您想要的只是检索具有修订版1的文档,以便它们可以“处理”并转到修订版2。 有一种明显的方法,创建一个从文档中的_rev字段中提取修订版号的视图,如

function(doc) {
  var rev = doc._rev.split("-");
  emit( rev[0], doc);
}

然而,这意味着使用一个视图,并且_rev是内置的,是不是使用_all_docs批量检索文档的直接方式?

1 个答案:

答案 0 :(得分:1)

我建议不要为此目的滥用CouchDB修订版。一些要点:

  • 您无法手动设置特定版本,因此如果您想直接在第3阶段存储文档,则必须添加它并应用2个NOP推文。此外,你不能“降级”修改。要实现此目的,您必须删除文档,再次添加并将其与NOP一起推送到所需的版本。这一切都非常不灵活。
  • 没有内置支持来检索具有特定修订版“前缀”的文档。
  • 如果您想在中间阶段修改处理工作流程,则必须在此阶段及所有后续阶段增加文档的修订。

我建议添加一个表示文档处理阶段的特定属性。另一种方法可能是为每个阶段创建专用的处理数据库。因此,可以通过相应数据库的_all_docs来请求特定阶段中的所有文档。根据您的使用情况,您可以在将文档添加到下一个处理数据库后将其删除。