Автоматическое обновление документов в couchdb - PullRequest
1 голос
/ 13 мая 2011

У меня более 10000 документов couchdb, каждый из которых имеет (упрощенный) формат, например -

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

Я хочу добавить еще одно поле к этому документу, которое является электронной почтой, чтобы этот документ теперь выглядел как -

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

Я понимаю, что могу легко обновить этот документ, вставив новый JSON в новом формате.

Но мой вопрос заключается в том, как я могу автоматически добавить новое поле во все "более 10 000" документов, которые у меня есть в БД? Нужно ли мне писать свой собственный скрипт для чтения каждого документа и обновлять каждый из них в отдельности? Или есть более простой способ?

1 Ответ

4 голосов
/ 13 мая 2011

Если вы используете представления для доступа к вашим данным, вы можете изменить представление, не изменяя документы.Просто отправьте значение электронной почты со значением по умолчанию "".

Предполагая, что вышеупомянутое не годится, используйте представление, чтобы показать вам, какие документы необходимо обновить.

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...