Verstehe map Funktion von CouchDB nicht richtig

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

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()?
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
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.
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

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
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
Antworten