2011-05-13 4 views
1

J'ai 10,000+ documents CouchDB, chacun ayant le format (simplifié) comme -mises à jour automatique de documents à CouchDB

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

Je veux ajouter un autre champ à ce document, qui est e-mail, de sorte que le document maintenant ressemble -

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

Je comprends que je peux facilement mettre à jour ce document en insérant un nouveau JSON, dans un nouveau format.

Mais ma question est de savoir comment puis-je ajouter un nouveau champ automatiquement à "tous les 10.000+" docs que j'ai déjà dans la base de données? Dois-je écrire mon propre script pour lire chaque document et mettre à jour chacun d'entre eux individuellement? Ou y a-t-il un moyen plus simple?

+0

D'où allez-vous lire les adresses e-mail? Ou voulez-vous réellement les mettre tous à vide? –

+0

Je veux les laisser vides dès maintenant. – spkhaira

+0

Cette affaire devrait le rendre facile. Si vous l'ajoutez simplement au schéma et définissez vide à True, cela aura le même effet. Je voudrais également définir par défaut "", donc ça va fonctionner. –

Répondre

4

Si vous utilisez des vues pour accéder à vos données, vous pouvez modifier la vue sans avoir à modifier les documents. Il suffit d'émettre une valeur email avec la valeur par défaut "".

En supposant que ce qui précède n'est pas bon, utilisez une vue pour vous montrer quels documents doivent être mis à jour.

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}); 
} 

Requête /db/_design/foo/_view/email_upgrade?include_docs=true. Vous pouvez ajouter une propriété pour vous aider. Question. La valeur doc dans chaque ligne est un document qui doit être mis à niveau. Vous pouvez les renvoyer avec POST /db/_bulk_docs. Boucle jusqu'à ce que vous avez 0 lignes. Une fois que vous avez 0 lignes, ajoutez une vérification à votre fonction validate_doc_update.