Rückgabe eindeutiger Werte durch den Schlüssel in CouchDB

8

Gibt es in CouchDB eine Möglichkeit, Folgendes zu tun? Eine Möglichkeit, eindeutige, eindeutige Werte mit einem bestimmten Schlüssel zurückzugeben?

%Vor%

Zum Beispiel:

Ссылка "key1" würde ['somevalue']

zurückgeben

Ссылка "key2" würde ['anotherval', 'andanother']     

wayoutmind 28.03.2011, 08:58
quelle

2 Antworten

9

Wie im definitiven CouchDB-Leitfaden empfohlen, sollten Sie die Werte angeben, die Sie eindeutig haben möchten der Schlüssel, dann Abfrage der Reduce-Funktion mit group=true .

Wenn beispielsweise keyfield das Feld mit "key1" und "key2" ist und valuefield das Feld mit den Werten ist, könnte Ihre Kartenfunktion wie folgt lauten:

%Vor%

und Ihre Reduzierungsfunktion könnte sein:

%Vor%

Dann Abfrage mit group=true&startkey=["key2"]&endkey=["key2",{}] gibt:

%Vor%     
Marcello Nuccio 29.03.2011 17:58
quelle
3

Basierend auf dem, was ich hier sehe (Ich werde meine Antwort bei Bedarf ändern) key1 und key2 sehen wie unabhängige Felder aus, so dass Sie zwei separate Ansichten benötigen.

Ich habe 5 einfache Dokumente in meiner Testdatenbank erstellt:

%Vor%

Hier sind die 2 Suchanfragen, die Sie benötigen:

%Vor%

Von dort aus kann Ihre reduce-Funktion alle Werte in einem Array zurückgeben, indem Sie einfach Folgendes tun:

%Vor%

Sie haben jedoch ausdrücklich distinct -Werte erwähnt. Da JavaScript keine native unique() -Methode für Arrays besitzt und wir CommonJS-Module nicht in View-Funktionen verwenden können, müssen wir dafür unsere eigene Logik hinzufügen. Ich kopiere einfach die erste array.unique() Funktion, die ich bei Google gefunden habe, du kannst deine eigene schreiben, die besser optimiert ist.

%Vor%

Sie verwenden dieselbe Reduzierungsfunktion in beiden Ansichten. Wenn Sie eine dieser Ansichten abfragen, wird standardmäßig auch die Reduzierung ausgeführt. (Sie müssen reduce=false explizit übergeben, um nur die Ergebnisse Ihrer Funktion map zu erhalten.

Hier sind die Ergebnissätze, die Sie mit den obigen map/reduce -Abfragen abrufen würden: (denken Sie daran, dass es sich um zwei separate Abfragen handelt)

%Vor%     
Dominic Barnes 28.03.2011 14:51
quelle

Tags und Links