2012-11-04 3 views
1

Dans ma base de données CouchDB, toutes les touches ont la forme « A_xxxxxxxx » où xxxxxxxx est complété par des zéros nombre décimal (par exemple « A_00000001 » ou « A_12345678 »)CouchDB: obtenir nombre de clés dans tessiture donnée

Je veux pour obtenir seulement le nombre de clés dans une gamme de clés donnée.

Par exemple, pour obtenir les clés de A_10000000 à A_30000000, je peux interroger quelque chose comme:

GET DATABASE/_all_docs?startkey="A_00001000"&endkey="A_30000000"&include_docs=false 

Mais le résultat contient toutes les clés, et je dois compter les éléments dans le champ « docs » de la sortie.

Depuis le nombre de clés dans ma requête sera énorme, et tout ce que je veux savoir est le nombre de clés, pas la liste réelle des clés.

La valeur de début et de fin de plage peut varier, ce qui n'est pas le cas.

Est-il possible d'obtenir uniquement le nombre de clés de la plage donnée, sans récupérer la liste de clés réelle?

Merci,

Répondre

1

Vous ne pouvez pas obtenir le nombre de touches dans une tessiture donnée en utilisant le haut-_all_docs vue. Mais vous pouvez obtenir le résultat souhaité à l'aide d'une carte personnalisée réduire vue comme celui-ci est décrit dans les CouchDB Definitive Guide

Map.js

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

reduce.js

function(keys, values, rereduce) { 
    return sum(values) 
} 

Vous pouvez ajouter ces vues à votre base de données CouchDB en utilisant l'utilitaire d'administration Futon en créant un nouveau document avec ces contenus:

{ 
    "_id": "_design/test", 
    "views": { 
     "count": { 
      "map": "function(doc) {\n emit(doc._id, 1);\n}", 
      "reduce": "function(keys, values, rereduce) {\n return sum(values)\n}" 
     } 
    } 
} 

_design/test/count peut alors être interrogé comme lieu de _all_docs et renverra le nombre de documents entre les touches de début et de fin.

Quand je lance cette requête à nouveau ma base de données sans clé de début et de fin, j'obtenir ce résultat:

{ 
    "rows":[ 
     { 
      "key": null, 
      "value": 185 
     } 
    ] 
} 

L'exécution de la requête à nouveau avec le début et les clés fin peuplaient je reçois ce résultat:

{ 
    "rows":[ 
     { 
      "key": null, 
      "value": 11 
     } 
    ] 
} 
Questions connexes