2011-05-13 62 views
1

我有10,000的CouchDB文档,就像每个都具有(简体)格式 -自动文档更新

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

我想另一个字段添加到该文件,这是电子邮件,使文档现在看起来像 -

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

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

但我的问题是,我怎么能自动添加新字段到“所有10,000+”文档,我已经在数据库中存在?我是否需要编写自己的脚本来阅读每个文档并分别更新它们中的每一个?还是有更简单的方法?

+0

你会在哪里阅读电子邮件地址?或者你是否真的想把它们都设置为空白? – 2011-05-13 06:31:47

+0

我想让它们保持空白。 – spkhaira 2011-05-13 06:33:56

+0

这种情况应该很容易。如果您只是将其添加到模式并将其设置为True,它将具有相同的效果。我也会将默认设置为“”,所以它会正常工作。 – 2011-05-13 06:35:28

回答

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函数中添加一个支票。