2016-07-13 4 views
0

habe ich Dokumente, die wie folgt aussehenCouchbase Verbindung Schlüssel mit Bereich Filterung und Ordnung und Filterung durch den zweiten Schlüssel

{ 
    ... 
    date: '2013-05-25T04:06:20.277Z', 
    user: 'user1' 
    ... 
} 

ich brauchen würde, um Dokumente zu finden, die ein Datum innerhalb eines bestimmten Bereichs haben und einen bestimmten Benutzer. Ich muss auch nach Datum sortieren.

Ich habe versucht emit([doc.user, dateToArray(doc.date)], null) aber damit kann ich nicht nach Datum sortieren, weil AFAIK der Schlüssel, der sortiert werden muss auf der linken Seite sein muss. Ist das richtig?

Wenn ich versuche, die Schlüssel umgekehrt umzudrehen, egal, welchen Benutzer ich in den startKey & EndKey einfügen, ändert es nichts.

zum Beispiel: startKey: [[0,11,21,0,0,0],"user1"], endKey: [[2016,11,21,0,0,0],"user1"] findet Dokumente von allen Benutzern, obwohl ich vermuten würde, dass es nur Dokumente finden, wo der zweite Schlüssel user1 ist.

Wie soll ich das tun? Meine Dokumentenanzahl, um Millionen gehen kann, so Sachen tut auf Code-Seite ist außer Frage ..

Antwort

0

Atleast für jetzt, landete ich 2 getrennte Ansichten mit bis (byDate und byUserAndDate)

Wenn ich nur nach Datum suchen muss, verwende ich die byDate Ansicht, die das Datum als den einzigen Schlüssel hat, Sortierung funktioniert gut. Wenn ich nach einem bestimmten Benutzer suche, benutze ich byUserAndDate, der [doc.user, doc.date] als sein zusammengesetzter Schlüssel hat, wenn das Ergebnis nur Elemente für 1 Benutzer enthält, funktioniert die Sortierung offensichtlich gut, weil es zuerst nach Benutzer und dann nach Datum sortiert.