2012-04-30 6 views
2

J'ai quelques éléments dans CouchDB avec un champ timestamp et un champ group. J'utilise cette fonction en vue d'obtenir une liste de tous les éléments où le groupe == « foo »:Une vue filtrée et triée dans CouchDB?

{ 
    "map" : "function(doc) { emit(doc.group, doc); }" 
} 

http://localhost:5984/my_database/_temp_view?key="foo"

Maintenant, je voudrais faire la sortie triée par le champ timestamp. Comment je fais ça? Au fond, je veux l'équivalent de cette requête SQL:

SELECT * FROM SomeTable WHERE group=? ORDER BY timestamp

Répondre

2

émettons l'horodatage comme une deuxième colonne:

function(doc) { emit([doc.group,doc.timestamp]); } 

Ensuite, une requête avec les paramètres suivants:

view?startkey=["foo"]&endkey=["foo",""] 

Je suppose que vos timestamps sont des nombres, pas des chaînes. Lisez this pour comprendre comment les horodatages numériques seront triés entre ["foo"] et ["foo",""].

Également, n'émettent pas doc comme valeur, il utilise beaucoup de stockage. Si vous avez vraiment besoin du document, utilisez include_docs=true dans votre requête.

+0

Merci, c'est exactement ce dont j'avais besoin. –

Questions connexes