2011-05-13 118 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函數中添加一個支票。