2011-11-03 6 views
1

Imaginez que vous souhaitiez utiliser le numéro de révision comme indicateur d'état pour les documents d'une base de données. La Révision 1 est pour les documents "bruts", la révision 2 pour un certain état "traité", et ainsi de suite. Ce que vous voulez, alors, est de récupérer seulement les documents avec la révision 1 afin qu'ils puissent être "traités" et portés à la révision 2. Il existe un moyen évident de créer une vue qui extrait le numéro de révision du champ _rev dans le document , quelque chose commeUtilisation de CouchDB pour le flux de données, ou comment récupérer des documents avec une révision spécifique

function(doc) { 
    var rev = doc._rev.split("-"); 
    emit(rev[0], doc); 
} 

Cependant, cela implique l'utilisation d'une vue et d'être _rev une commande interne, est-il pas un moyen simple de récupérer des documents en vrac à l'aide _all_docs?

Répondre

1

Je recommande de ne pas abuser des révisions de CouchDB à cette fin. Quelques points:

  • Vous ne pouvez pas définir manuellement une révision spécifique, donc si vous voulez stocker un document directement à l'étape 3, vous devez l'ajouter et appliquer 2 puts NOP. De plus, vous ne pouvez pas "rétrograder" la révision. Pour cela, vous devez supprimer le document, l'ajouter à nouveau et le pousser avec les NOP à la révision désirée. Tout cela est vraiment inflexible.
  • Il n'y a pas de support intégré pour récupérer des documents avec des "préfixes" de révision spécifiques.
  • Si vous souhaitez modifier votre processus de traitement avec une étape intermédiaire, vous devez augmenter les révisions des documents dans cette étape et toutes les étapes suivantes.

Je recommanderais d'ajouter un attribut spécifique qui désigne l'étape de traitement du document. Une autre approche pourrait consister à créer des bases de données de traitement dédiées pour chaque étape. Ainsi, la demande de tous les documents dans une étape spécifique peut être effectuée via _all_docs de la base de données correspondante. En fonction de votre cas d'utilisation, vous pouvez supprimer les documents de la base de données précédente une fois qu'ils ont été ajoutés à la base de données de traitement suivante.

+0

Merci, pas exactement ce que je cherchais, mais utile de toute façon. – jjmerelo

Questions connexes