在couchdb中自动更新文档

时间:2011-05-13 06:24:59

标签: couchdb

我有10,000多个couchdb文档,每个文档都有(简化)格式,如 -

{
    "First Name" : "John",
    "Last Name" : "Doe"
}

我想在此文档中添加另一个字段,即电子邮件,因此该文档现在看起来像 -

{
    "First Name" : "John",
    "Last Name" : "Doe",
    "e-mail" : ""
}

据我所知,我可以通过以新格式插入新的JSON来轻松更新此文档。

但我的问题是如何自动将新字段添加到我在数据库中存在的“所有10,000多个”文档中?我是否需要编写自己的脚本来阅读每个文档并单独更新每个文档?或者有更简单的方法吗?

1 个答案:

答案 0 :(得分:4)

如果使用视图访问数据,则无需修改文档即可修改视图。只需发出默认值为“”的电子邮件值。

假设上述情况不好,请使用视图向您显示需要升级的文档。

function(doc) {
  // views.email_upgrade.map
  if(! ('e-mail' in doc)) {
    var key = [doc["Last Name"], doc["First Name"]];
    emit(key, {_id:doc._id, _rev:doc._rev});
}

查询/db/_design/foo/_view/email_upgrade?include_docs=true。您可以添加&limit=N属性来提供帮助。查询。每行中的doc值是需要升级的文档。您可以使用POST /db/_bulk_docs将其发回。循环直到你有0行。获得0行后,请在validate_doc_update函数中添加一项检查。