2010-09-06 6 views
3

Je me demande comment utiliser la carte de CouchDB/réduire avec plusieurs paramètres. Par exemple, si j'ai des équipes qui ont des joueurs avec l'âge et le sexe, je suppose que je ferais cela pour ma fonction carte:Carte/Réduire dans CouchDB avec plusieurs paramètres?

"function(doc){ 
    if(doc.team_name) { 
    emit(doc.team_name, doc); 
    } 
}" 

Cependant, je ne suis pas sûr comment écrire une fonction réduire pour obtenir le plus vieux joueur mâle sur l'équipe ou la plus jeune femme ou n'importe quelle requête arbitraire. Puis-je transmettre des paramètres dans l'URL ou dois-je écrire plusieurs vues?

Merci à l'avance,
Ben

Répondre

5

fonction reduce a un peu différent but. La fonction Réduire regroupe une valeur pour tous les documents traités. Donc, vous pouvez, par exemple, additionnez les salaires des joueurs, ou vieillissez, ou comptez-les.

Si vous voulez obtenir le joueur le plus âgé dans l'équipe, il suffit de mettre votre clé dans la fonction emit à [team, age]. La vue est toujours triée par clé.

function(doc) { 
    if (doc.team_name) { 
    emit([doc.team_name, doc.age], doc); 
    } 
} 

maintenant juste interroger votre vue. Ajoutez le paramètre descending=true, de sorte que le joueur le plus ancien soit le premier. Par défaut, l'ordre de vue est croissant. Si vous voulez obtenir des joueurs dans une équipe spécifique (toujours triée par âge), ajoutez des paramètres: startkey=[<team>, 999]&endkey=[<team>,0]&descending=true

+1

Le résultat ne serait-il pas une liste triée après le nom de l'équipe plutôt que l'âge de l'équipe? Ma suggestion est: emit ([doc.age, doc.team_name], doc); – javabeangrinder

Questions connexes