Database Reference
In-Depth Information
Änderungen iltern
Wie gerade gesehen, bietet die Changes-API einen Einblick in die Vorgänge
innerhalb einer CouchDB-Datenbank. Sie liefert alle Änderungen in einem
einzigen Stream zurück. Manchmal will man aber gar nicht jede kleine Än-
derung wissen, sondern ist nur an einer Teilmenge der Änderungen interes-
siert. Zum Beispiel könnten Sie nur wissen wollen, ob Dokumente gelöscht
wurden oder ob Dokumente einer bestimmten Gruppe verändert wurden. An
dieser Stelle kommen
Filterfunktionen
ins Spiel.
Ein Filter ist eine Funktion, die ein Dokument (und Request-Informationen)
nimmt und entscheidet, ob er das Dokument durchlässt oder nicht. Das ist
abhängig vom Rückgabewert. Sehen wir uns an, wie das funktioniert. In un-
serer
music
-Datenbank besitzen die meisten artist-Dokumente eine
country
-
Property, die einen aus drei Buchstaben bestehenden Code enthält. Nehmen
wir an, wir wären nur an Bands aus Russland (RUS) interessiert. Unsere
Filterfunktion könnte wie folgt aussehen:
function
(doc) {
return
doc.country ===
"RUS"
;
}
Fügen wir das in ein Design-Dokument unter dem Schlüssel
filters
ein,
können wir sie bei
_
changes
-Request mit angeben. Doch bevor wir das tun,
wollen wir unser Beispiel erweitern. Statt immer nur russische Bands zu
filtern, sollten wir die Eingabe parametrisieren, damit wir das gewünschte
Land in der URL angeben können.
Hier ein parametrisierter Länderfilter:
function
(doc, req) {
return
doc.country === req.query.country;
}
Beachten Sie, dass wir die
country
-Property des Dokuments mit einem Para-
meter gleichen Namens vergleichen, der im Query-String des Requests ange-
geben wurde. Um uns das in Aktion anzusehen, legen wir ein neues Design-
Dokument für geographische Filter an und fügen die Funktion hinzu:
$
curl -X PUT \
http://localhost:5984/music/
_
design/wherabouts \
-H "Content-Type: application/json" \
-d '{"language":"javascript","filters":{"by
_
country":
"function(doc,req){return doc.country === req.query.country;}"
}}'