2016-04-06 9 views
0

Ich habe eine Datenbank mit mehreren Dokumenten. Jedes Dokument hat ein Feld mit Benutzer-ID. Angenommen, diese Dokumente gehören zwei Benutzern: 1 und 2. Ich möchte ein neues Dokument nur für jeden Benutzer extrahieren. Wie sollte ich den Suchindex implementieren? Ich kann jetzt alle Dokumente eines Benutzers abrufen, indem ich benutze: user_id: 1 Aber wie kann ich doc-Nummer auf eins für jeden Benutzer in einer Abfrage begrenzen?Suche ein Dokument pro Benutzer auf Cloudant

Antwort

0

Angenommen, Sie ein Datum Eigenschaft auf jedem doc haben Sie dies erreichen könnte wie folgt aussehen:

Erstellen Sie den folgenden Index:

{ 
    "index": { 
     "fields": [ 
     {"user_id":"desc"}, 
     {"date_field":"desc"} 
     ] 
    }, 
    "type": "json" 
} 

Um die neuesten doc Abfrage für user_id == „1“ Ihr Abfrage würde wie folgt aussehen:

{ 
    "selector": { 
     "user_id": "1" 
    }, 
    "fields": [ 
     "_id", 
     "user_id", 
     "date_field" 
    ], 
    "sort": [ 
     { "user_id": "desc" }, 
     { "date_field": "desc" } 
    ], 
    "limit":1 
} 

Wenn Sie versuchen, mehrere Benutzer in einer einzigen Abfrage zurückkehren, dann würden Sie so etwas zu tun haben:

  1. hinzufügen eine Eigenschaft namens latest oder ähnliche
  2. einen Index hinzufügen auf user_id und latest:

    { 
        "index": { 
         "fields": [ 
         "user_id", 
         "latest" 
         ] 
        }, 
        "type": "json" 
    } 
    
  3. Jedes Mal, wenn Sie für diese user_id ein neues Dokument finden Sie das Dokument hinzufügen, wo latest wahr ist:

    { 
        "selector": { 
         "user_id": "1", 
         "latest" : true 
        }, 
        "fields": [ 
         "_id", 
         "user_id", 
         "latest" 
        ] 
    } 
    
  4. Set latest = false auf diesem Dokument

  5. Setzen Sie das neue Dokument mit latest = true
  6. Diese Abfrage die neuesten doc für alle Benutzer finden:

    { 
        "selector": { 
         "user_id": {"$gt":null}, 
         "latest" : true 
        }, 
        "fields": [ 
         "_id", 
         "user_id", 
         "latest" 
        ] 
    }