Seite 1 von 1

Verstehe map Funktion von CouchDB nicht richtig

Verfasst: Mittwoch 9. Februar 2011, 10:23
von burli
Ich lese mich gerade etwas in CouchDB ein, verstehe aber die map Funktion nicht so ganz. Hier mal ein Beispiel aus dem Buch

Code: Alles auswählen

function(doc) {
    var store, price, value;
    if (doc.item && doc.prices) {
        for (store in doc.prices) {
            price = doc.prices[store];
            value = [doc.item, store];
            emit(price, value);
        }
    }
}
Zunächst mal "function(doc)". Wie läuft das ab? Wenn so ein View aufgerufen wird, durchläuft die Datenbank dann alle Dokumente und ruft für jedes Dockument die Funktion auf? (bzw die Funktion ist ja ein View)

Außerdem soll diese Funktion eine Sortierung nach dem Preis vornehmen, nur wie und wo geschieht das? Macht das emit()?

Re: Verstehe map Funktion von CouchDB nicht richtig

Verfasst: Mittwoch 9. Februar 2011, 10:54
von BlackJack
@burli: Das nach den Werten sortiert wird, die `emit()` übergeben werden, steht doch im Text. Die Sortierreihenfolge hängt also von der Reihenfolge ab, in der die Einzelergebnisse im Rückgabe-Array stehen.

Und ja -- die Funktion wird für jedes Objekt in der DB aufgerufen und `emit()` übergibt man die Treffer, die man in der Sicht haben möchte.

Re: Verstehe map Funktion von CouchDB nicht richtig

Verfasst: Mittwoch 9. Februar 2011, 11:49
von burli
BlackJack hat geschrieben:@burli: Das nach den Werten sortiert wird, die `emit()` übergeben werden, steht doch im Text. Die Sortierreihenfolge hängt also von der Reihenfolge ab, in der die Einzelergebnisse im Rückgabe-Array stehen.
Das eine Sortierung stattfindet ist klar. Das die Sortierung nach dem Preis vom kleinsten zum größten geht ist auch klar. Aber ich sehe da nur eine for Schleife, in der aus jedem Dokument die Preise geholt und an den View übergeben werden. Wo wird da sortiert? Sortiert das die Datenbank automatisch, wenn nichts anderes angegeben ist?

[Edit] Sorry, ich habe einen Absatz überlesen.
Die Zeilen von Views werden immer nach ihrem Schlüssel sortiert. In diesem Beispiel zuerst nach Typ und dann nach Preis.
Kommt davon, wenn man dauernd gestört wird

Re: Verstehe map Funktion von CouchDB nicht richtig

Verfasst: Mittwoch 9. Februar 2011, 17:07
von noisefloor
Hallo,

nach meiner eigenen Erfahrung hängt das Verstehen von Map in CouchDB zum großen Teil davon ab, wie gut wann den JavaScript Code darin versteht (bzw. zumindest bei mir war es so ;-) ). Was "emit" macht ist ja relativ klar.

Das o.g. Beispiel ist ja noch relativ einfach. Die Funktionen können ja grundsätzlich beliebigen, gültgen JavaScript Code beinhalten.

Oder andersrum: Wenn's mal komplexer werden sollte tut man (sehr) gut daran, JavaScript zu verstehen. Den Teil, der für die Manipulation von DOM / HTML da ist, kann man ja weg lassen. Dann ist es auch nicht sooo viel, was man verstehen sollte. :-)

Gruß, noisefloor