2012-04-04 4 views
6

Mir ist bewusst, dass man über die REST-API den Parameter 'limit' angeben kann (zB? Limit = 5), um die Anzahl der von einer gegebenen View zurückgegebenen Ergebnisse zu begrenzen in CouchDB.Verwendung des Limit-Parameters in CouchDB View Map-Funktion

Meine Frage ist, ob es eine Möglichkeit gibt, dies innerhalb der Kartenfunktion selbst innerhalb der Ansicht zu tun ...?

+3

Können Sie weitere Informationen bereitstellen? Was möchten Sie tun? –

Antwort

5

Die Antwort auf Ihre spezifische Frage ist "Nein".

Die Map-Funktion wird auf jedes Dokument in der Datenbank angewendet und die Reduce-Funktion, falls definiert, wird auf jedes Reduzierergebnis angewendet. Denken Sie vor dem Rechnen.

Die Abfrageparameter, die Sie in der URL angeben, werden auf den B + -Baum angewendet, den Ihre MapReduce-Funktionen erstellen. Wenn Sie zum Beispiel ?limit=5 sagen, werden die fünf linken Blätter im Baum als Ergebnis verwendet. Oder wenn Sie ?limit=5&descending=true sagen, dann werden die fünf rechtesten Blätter im Baum als Ergebnisse verwendet.

Was Sie jedoch versuchen, indem Sie eine ?limit=5 in der Map-Funktion ausführen, kann auf andere Weise erreicht werden. Ihre Anwendung könnte z. B. etwas in die Dokumente aufnehmen, mit dem sie in die Ergebnisse aufgenommen werden. Oder erzwingen Sie, dass nur fünf Dokumente im Index angezeigt werden, obwohl dies mühsam und abhängig von der Größe Ihrer Datenbank kostspielig wäre.

Prost.

0

Wenn Ihre UUIDs sequenziell sind (Sie können Ihre Konfigurationen dafür überprüfen), können Sie diese in und an sich nutzen, um nur die ersten fünf Dokumente anzuzeigen.

0

Es ist nicht möglich für map Funktion. Weil Map jedes einzelne Dokument einzeln und möglicherweise gleichzeitig auf jedem separaten Knoten anpackt. Es kann nicht über andere Dokumente überhaupt bewusst sein

Aber ich denke, was Sie wollen, wäre mit reduce möglich. Reduzieren würde nach Map-Funktion ausgeführt werden alles tun und alles Ergebnis vorhanden haben. So könnte man das Ergebnis von map in irgendeiner Art und Weise verändert

Einfach ausgedrückt, könnte man reduce zu Gruppenzeilen mit dem gleichen Schlüssel verwenden, dann könnte man jede Gruppe trimmen, um nur 5 Ergebnisse zu haben (in rereduce, wenn ich es richtig erinnere)