2017-06-14 4 views
0

ich ektrop bin mit einem Blick zur Abfrage wie so:CouchDB Ansicht: passend zu allen Tasten nur

query = new ViewQuery().designDocId("_design/accounts").viewName("by_account").key(search).startKey(0).endKey(99); 

Dies wird Dokumente zurück, die mit dem Schlüssel search oder den zwischen der Start- und Zielschlüssel übereinstimmen. Ich versuche, Dokumente in der Ansicht zu erhalten, die sowohl mit den search als auch mit den Start/Ende-Tasten übereinstimmen. Wie bekomme ich das?

Meine Ansicht ist wie folgt gebildet:

"by_account": { 
      "map": "function(doc) { 
        emit(doc.loginString,doc); 
        emit(doc.enrolmentPercentage, doc); }" 
     } 

Antwort

2
  1. Vermeiden Sie das Dokument als Wert in der Karte emittierenden/reduzieren. Es wird Teil des Index sein, so dass der Index größer und langsamer wird. Geben Sie stattdessen keinen Wert aus und verwenden Sie den Abfrageparameter "include_docs", um das Dokument abzurufen.

    1. Verwenden Mango Query und:
    2. Sie können die Schlüsselparameter sowie die StartKey und EndKey (es widersprüchliche)

    Für diese Art der Abfrage, Sie haben vor allem drei Lösungen nutzen der Operator $ oder (der Schlüssel soll mit "Suche" oder etwas zwischen 0 und 99 übereinstimmen)

  2. Zwei Abfragen durchführen (eine Suche nach dem Schlüssel "suchen" und die andere nach "startkey" und "endkey"
  3. Erstellen Sie eine spezielle Ansicht für diese einzelne Anfrage. Wenn der Login-String beispielsweise "search" lautet, geben Sie -1 aus. Andernfalls geben Sie den Registrierungsprozentsatz aus. Fragen Sie dann mit startkey (-1) und endkey (99) ab. Behandeln Sie auf der Clientseite die -1-Werte, als ob sie gesucht wurden.

Hinweis: Was Lösung 3, könnte es handelte in einer anderen Art und Weise sein, aber ich habe das Beste getan, was ich mit der Information konnte ich hatte.

+0

Für 3, wie wählen Sie -1 aus, wenn die Suche "Suche" ist? Soweit ich weiß, gibt es keine Möglichkeit, Argumente an die Funktion "map" zu übergeben. Daher kann ich nicht entscheiden, wann ich -1 oder einen anderen Wert ausgeben soll. Danke – OrangePot

+0

Die Emit-Funktion wird innerhalb einer JavaScript-Funktion aufgerufen. So können Sie tun, wenn (loginstring == "suchen") emittieren (-1, val) –

+0

'" search "' ist Eingabe vom Benutzer. ich kann es nicht hart in das 'if' codieren, wie du es getan hast – OrangePot

Verwandte Themen