2011-04-27 3 views
2

L'une des choses perdues lors du passage à CouchDB est la possibilité d'avoir des valeurs par défaut pour un champ. Par exemple, dans une base de données SQL, vous pouvez avoir un champ appelé date par défaut now(). Est-il possible de faire quelque chose de similaire dans CouchDB? De ce que je peux dire, le seul morceau de code qui s'exécute à chaque création et mise à jour est la méthode validate_doc_update d'un document de conception. Cependant, lorsque nous l'avons testé en créant une validation fictive, nous ne pouvons pas le faire fonctionner. Voici une simple fonction de validation qui tente de définir le champ newDoc.foo, mais elle n'est jamais enregistrée.Est-il possible d'ajouter des champs à un document dans une fonction de validation CouchDB?

function(newDoc, oldDoc, userCtr) { 
    newDoc.foo = "bar!"; 
} 

Nous avons vérifié et vérifié que la méthode est validate_doc_update obtenir appelé, il semble donc que s'il y a un moyen d'ajouter automatiquement les champs à un document CouchDB, en utilisant la fonction de validation ne sont pas la voie à suivre. D'autres suggestions?

Répondre

3

Vous pouvez utiliser une certaine logique de vue pour appliquer les valeurs par défaut lorsque vous visualisez le document via une vue.

Vous pouvez lui appliquer une update handler après son écriture (et éventuellement après des modifications ultérieures) mais cela nécessiterait un autre appel pour l'invoquer à chaque fois.

Je résoudrais probablement cela en créant le document que vous insérez en tant qu'objet avant de l'insérer et en y appliquant les valeurs par défaut afin que ce que vous écrivez à CouchDB soit déjà correct.

+1

Dans les versions récentes de CouchDB [il n'est pas permis de modifier le document dans la vue] (http://web.archiveorange.com/archive/v/oW6DzLPEoEfysNJMyaLk). –

+0

Merci pour l'indice sur les gestionnaires de mise à jour. Un gestionnaire de mise à jour bien conçu peut ressembler et se sentir exactement comme le mécanisme normal de création et de mise à jour de documents tout en ajoutant des champs supplémentaires, comme une date de création. De plus, en les mettant dans les fonctions de mise à jour, ils ne sont pas réexécutés après la réplication. – Pridkett

Questions connexes