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
0
A
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:
- hinzufügen eine Eigenschaft namens
latest
oder ähnliche einen Index hinzufügen auf
user_id
undlatest
:{ "index": { "fields": [ "user_id", "latest" ] }, "type": "json" }
Jedes Mal, wenn Sie für diese
user_id
ein neues Dokument finden Sie das Dokument hinzufügen, wolatest
wahr ist:{ "selector": { "user_id": "1", "latest" : true }, "fields": [ "_id", "user_id", "latest" ] }
Set
latest
= false auf diesem Dokument- Setzen Sie das neue Dokument mit
latest
= true Diese Abfrage die neuesten doc für alle Benutzer finden:
{ "selector": { "user_id": {"$gt":null}, "latest" : true }, "fields": [ "_id", "user_id", "latest" ] }