2014-05-09 3 views
1

En premier lieu, cette question - les documents de conception de filtre de all_docs - semblait déjà être résolu comme décrit ici: https://plus.google.com/+JasonDeRose/posts/1iP5tu3wVqwCouchDB, all_docs et documents de conception de filtre avec endkey

/mydb/_all_docs?endkey=%22_%22 

et a travaillé à la première place. Cependant, soudainement dans une configuration différente (en réalité juste un déploiement différent), la requête renvoie uniquement une collection vide []. Il semble que la commande ait changé, sans endkey = "_" la collection complète est retournée (y compris les documents de conception). J'ai essayé différentes combinaisons d'endkey/startkey mais je n'arrive pas à filtrer les documents de conception.

Enfin, j'ai ajouté un filtre et j'ai basculé sur _changes? Include_docs = true pour charger les documents initiaux. J'ai également pensé à la définition d'une vue, mais je n'aime pas que cela se traduise par une réplication des données et quelques inconvénients avec le flux de modifications (nécessaire dans un autre contexte). D'autre part, le filtre sera exécuté pour chaque document.

Est-ce un bug que endkey =% 22_% 22 ne fonctionne plus et existe-t-il un moyen plus pratique et fonctionnel?

Répondre

4

/_all_docs est un cas particulier pour CouchDB. Au lieu du classement Unicode normal, il utilise le classement ASCII.

Le caractère '_' dans l'ordre ascii s'affiche entre majuscules et minuscules. Ainsi, si votre ID de document commence par des lettres minuscules (comportement par défaut), il affichera après tous les documents de conception. Si vos ID de document commencent par des majuscules, ils apparaîtront avant les documents de conception. Essayez de créer un document avec un identifiant de: "ABC" Vous le verrez apparaître avant le document de conception et votre astuce pour filtrer les documents de conception fonctionnerait dans ce cas. Cependant, je recommande de ne plus utiliser la vue _all_docs. Au lieu de cela, utilisez la fonctionnalité d'affichage normal. Lorsque vous créez une vue, CouchDB ignore automatiquement les documents de conception pour vous. Donc, si votre vue ressemblait à:

function(doc){ 
    emit(doc._id, null); 
} 

Vous pouvez interroger ce sans début ou fin clé, et obtenir tous les documents sans conception docs.

En outre, s'il vous plaît regardez l'ordre de classement Unicode, c'est l'ordre dans lequel toutes vos autres vues seront, et il est important de comprendre que vous travaillez avec CouchDB. Vous pouvez lire tout à ce sujet ici: https://wiki.apache.org/couchdb/View_collation

Questions connexes