2009-05-08 5 views
3

Ich versuche eine Couchdb-Ansicht zu schreiben, die einen created_at-Zeitstempel in einem sortierbaren Format (2009/05/07 21:40:17 +0000) erstellt und alle Dokumente zurückgibt, die vorhanden sind ein größerer created_at-WertCouchDB Aufrufe: created_at größer als ein übergebener Wert

Ich benutze speziell couch_foo, aber wenn ich herausfinden kann, wie man die Ansicht schreibt, kann ich es in Futon oder im couch_foo Modell erstellen, anstatt couch_foo es für mich tun zu lassen.

Ich habe rundherum gesucht und kann die Karte nicht berechnen/reduzieren, um dies zu tun, wenn es möglich ist.

Antwort

3

Sie möchten eine Ansicht schreiben, die einen Schlüssel des Zeitstempelfelds in diesem Format erstellt, und dann mit dem Parameter startkey abfragen.

So würde der Blick etwas wie folgt aussehen:

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

Und Ihre URL wäre so etwas wie:

http://mysever/database/_design/mydoc/_view/myview?startkey="2009/05/07 21:40:17 +0000" 

Die HTTP view API Seite auf der Wiki weitere Informationen hat. Sie können auch die User Mailing List betrachten.

1

Bitte beachten Sie, dass couchdb nur auf JSON-Werten funktioniert. Wenn die Zeitzone, in der das Dokument in Couchdb gespeichert ist, von der Zeitzone Ihres Startschlüssels abweicht, wird die Abfrage wahrscheinlich fehlschlagen.

4

Dies ist die Art von Problem, das ich anfänglich kennengelernt habe, bevor ich vollständig verstanden habe, wie Ansichten funktionieren.

Der Schlüssel zum Verständnis ist, dass die Ansicht nur einmal für jede (Revision) eines Dokuments ausgeführt wird. Mit anderen Worten, wenn Sie eine Ansicht abfragen, führen Sie die Funktion nicht aus, sondern sehen einfach nach, wann die Funktion ausgeführt wurde. Daher gibt es keine Möglichkeit, vom Benutzer übermittelte Parameter an eine Ansicht zu übergeben.

Wie kann man dann einen Wert in einer Ansicht mit einem vom Benutzer eingereichten Wert vergleichen? Das Geheimnis besteht darin, dieses Feld als einen Schlüssel in der Kartenfunktion auszugeben und darauf zu vertrauen, dass die Couchdb-Reihenfolge durch die Tasten angeordnet wird.

Ihre Kartenfunktion wäre so etwas wie

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

sein und man würde es wie so abfragen:

http://localhost:5984/db/_design/ddoc/_view/view?startkey=%222009/05/07%2021:40:17 +0000%22 

ich genommen habe die Freiheit URIEncoding die Anführungszeichen und Leerzeichen in der URL, so dass es sollte wie es sein soll verwendet werden.

Verwandte Themen