2012-03-24 15 views
1

Ich bin Neuling zu CouchDb Karte schreiben und Abfragen zu reduzieren. Eine meiner Anforderungen basiert auf einigen Schlüsseln, die wir ausstrahlen müssen. Ich schrieb erfolgreich für das wie unten erwähnt.map und reduzieren Sie Abfragen in Couchdb

function(doc) { 
emit([doc.type , doc.category, doc.user], doc); 

}

Wenn wir drei Schlüsselwerte geben wie

http://localhost:5984/test/_design/myDesign/_view/myView?key=["Science","A","John"] 

dann werden diese Daten ausgegeben werden. Aber meine Zweifel ist, wie kann ich die Daten erhalten, wenn wir einen Schlüssel oder zwei Schlüssel für diese Ansicht geben. Das bedeutet für die obige Ansicht, wenn der Benutzer einen Schlüssel wie doc.user erwähnte, werden die Benutzerdaten basierend auf den drei Schlüsseln ausgegeben. Und noch ein Zweifel ist, können wir zwei Werte für einen Schlüssel geben? ? Angenommen, der Benutzer möchte die Daten entweder mit dem Benutzernamen JOHN oder Joe abrufen, indem er dieselbe Ansicht verwendet. Bitte geben Sie Anleitung, um zu erreichen.

Danke.

Antwort

1

Sie könnten Ihrer Meinung nach auf diese Weise ändern:

emit([doc.user, doc.type, doc.category], doc); 

und dann für

?startkey=["someName"]&endkey=["someName",{}] 

dann in der Ergebnisliste stellen sind alle Dokumente, die doc.user = „somename“, unabhängig von der Art haben und Kategorie

Wenn Sie genauere Informationen benötigen, können Sie Ihrem Anruf ein weiteres Kriterium hinzufügen:

?startkey=["someName","someType"]&endkey=["someName","someType",{}] 

dann erhalten Sie alle Dokumente mit someName AND someType.

Aber Sie die gleiche Reihenfolge verwenden, um

, wenn Sie einen weiteren Auftrag benötigen (Schlüsselfelder müssen von links nach rechts gefüllt) (sucht nur Typen), müssen Sie sich mit dem anderen, um eine zweite austrahlen, in der gleichen Funktion (oder in einer anderen Funktion).

Die gleichzeitige Abfrage von zwei Schlüsseln ist nur mit dem angegebenen Schlüsseltaster möglich. dann müssen Sie mit Körper

{Schlüssel = [[ "Science", "A", "John"], [ "Science", "A", "Joe"]]} eine Ansicht py POST aufrufen

+0

danke für die Antwort, {Tasten = [["Wissenschaft", "A", "John"], ["Wissenschaft", "A", "Joe"]]} aber es funktioniert nicht, können Sie bitte die Syntax bereitstellen für den Zugriff auf die beiden Werte für die gleiche Ansicht zu einer Zeit – veerender

+0

Versuchen Sie mit Anführungszeichen um 'Schlüssel' herum. Weitere Informationen finden Sie in der Dokumentation (http://wiki.apache.org/couchdb/HTTP_Bulk_Document_API#Fetch_Multiple_Documents_With_a_Single_Request). –

Verwandte Themen