2015-12-02 5 views
0

Je suis assez nouveau pour couchDB et j'ai des problèmes avec une requête.Comment créer une requête pour compter les occurrences de mots-clés pour chaque utilisateur dans un ensemble de données

Voici un exemple de l'ensemble de données Je travaille avec

{ 
"_id": "data", 
"_rev": "3-b78ec99614827106f637148c73dbf876", 
"data": [ 
     { 
     "id": 0, 
     "tags": [ 
      "cupidatat", 
      "mollit", 
      "labore", 
      "minim", 
      "pariatur", 
      "qui", 
      "ipsum" 
     ] 
     }, 
     { 
     "id": 1, 
     "tags": [ 
      "ex", 
      "cillum", 
      "est", 
      "et", 
      "mollit", 
      "mollit", 
      "exercitation" 
     ] 
     } 

Ceci est ma fonction de carte

function(doc) { 
    for(var i in doc.data) 
    { 
    var person = doc.data[i]; 
    for(var tag in person.tags) 
     { 
     emit(person.tags, 1); 
     } 
    } 
} 

Ceci est la diminution de la fonction

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

Je suis en train pour produire des résultats qui me donneront le nombre d'occurrences de chaque étiquette pour tous les enregistrements comme,

key    value 
"cupidatat"   1 

"mollit"   3 

Comment puis-je corriger le problème pour obtenir les bons résultats?

Répondre

1

On dirait que vous êtes très proche. En utilisant votre échantillon doc j'ai obtenu les résultats que vous recherchez en utilisant cette fonction carte:

function(doc) { 
    for (var i = 0; i < doc.data.length; i++) { 
    for (var j = 0; j < doc.data[i].tags.length; j++) { 
     emit(doc.data[i].tags[j], 1); 
    } 
    } 
} 

et a utilisé le intégré réduire:

_sum 

RETURNS requête suivante JSON dans le format que vous spécifiez:

curl -X GET http://host:5984/db/_design/words/_view/count?reduce=true&group_level=1