2017-08-23 4 views
2

Je souhaite récupérer tous les documents autres que les documents de conception, mais _all_docs renvoie tous les documents de la base de données. À partir des réponses, j'ai trouvé que l'utilisation de deux requêtes donnerait les résultats.Exclusion des documents de conception dans la requête _all_docs dans Cloudant

  1. _all_docs de endkey = "_" - une liste de documents JUSQU'A la première conception doc
  2. _all_docs startkey = "Design_ \ uffff" - une liste de documents après la conception docs

Cela ne fonctionne pas si le document suivant les documents de conception, a _id "` `test". Il donne les documents ayant _id commençant par des lettres minuscules. Le ASCII _ est de 95, et celle de back-tick est 96. Les petites lettres commencent par 97. Ainsi peut la requête ci-dessus pour être modifiés: _all_docs startkey = « ` »

Répondre

2

Vous êtes tout à fait raison? le point de terminaison _all_docs renvoie des documents de conception. Comme le caractère _ se trouve entre les chiffres + les majuscules et les minuscules, les documents de conception apparaissent juste avant les documents commençant par une lettre minuscule (ou une coche dans votre exemple).

Cela vous laisse avec deux choix:

1) Faire deux appels à _all_docs: GET /mydb/_all_docs?endkey="_" & GET /mydb/_all_docs?startkey=" « ` pour obtenir les documents « de chaque côté » des documents de conception 2) ou créez une nouvelle vue MapReduce . comme vue MapReduce faire des documents de conception d'index non, cela vous permet d'obtenir une liste de tous vos documents (à l'exclusion documents de conception) en une seule requête.

La fonction de carte pourrait être aussi simple que

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

L'interrogation de la vue avec GET /mydb/_design/report/_view/myalldocs

+0

pouvez-vous expliquer davantage cette approche? Je ne comprends pas comment "Faire deux appels à _all_docs". Merci beaucoup! – CarCrazyBen