Abfrageparameter
Abfrageparameter ändern die Ausgabe von IBM Cloudant Query-Anfragen, indem sie die Sortierreihenfolge, die zurückgegebenen Felder oder die Paginierung der Antworten ändern. Die Parameter werden in der Abfrage zusammen mit dem Feld selector angegeben.
Übersicht der Parameter
Dieses JSON-Dokument verwendet alle verfügbaren Abfrageparameter:
{
// Query selector
"selector": {
"year": {
"$gt": 2010
}
},
// Specify fields to return
"fields": ["_id", "_rev", "year", "title"],
// Specify sort order
"sort": [{"year": "asc"}],
// Return a maximum number of results
"limit": 10,
// Start returning results from a previous bookmark (pagination)
"bookmark":"g1AAAAA-eJzLYWBgYMpgSmHgKy5JLCrJTq2MT8lPzkzJB"
// Hint to use a specific index for a query
"use_index": "_design/32372935e14bed00cc6db4fc9efca0f1537d34a8",
// Disallow using a different index than the specified index
"allow_fallback": false
}
Angabe der zurückzugebenden Felder
Es ist möglich festzulegen, welche Felder für ein Dokument zurückgegeben werden, wenn Sie aus einer Datenbank auswählen. Dies kann Vorteile bieten:
- Ihre Ergebnisse werden nur auf die Teile des Dokuments eingegrenzt, die für Ihre Anwendung benötigt werden.
- Die Größe der Antwort wird verringert.
Die zurückzugebenden Felder werden in der Abfrage mit dem Array fields angegeben. Durch die angegebenen Feldnamen kann mithilfe der Punktschreibweise auf Unterfelder zugegriffen werden.
Diese Abfrage gibt nur die vier angegebenen Felder in den Ergebnisdokumenten zurück:
{
"selector": {
"Actor_name": "Robert De Niro"
},
"fields": [
"Actor_name",
"Movie_year",
"_id",
"_rev"
]
}
Nur die Felder des angegebenen Filters werden in die Antwort eingeschlossen. Das Feld _id oder andere Metadatenfelder werden nicht automatisch eingeschlossen.
Sortierung der Ergebnisse
Verwenden Sie das Feld sort in einer Abfrage, um anzugeben, wie die zurückgegebenen Ergebnisse geordnet werden sollen. Das Feld sort enthält eine Liste von Feldnamen- und Richtungspaaren, ausgedrückt als Array. Das
erste Feldname/Richtung-Paar bildet die oberste Ebene der Sortierung. Weitere Paare, falls vorhanden, geben die nächste Sortierstufe an.
Das Sortierfeld kann ein beliebiges Feld sein. Verwenden Sie bei Bedarf die Punktschreibweise zur Angabe von Unterfeldern.
Der Richtungswert ist asc für aufwärts und desc für abwärts:
"sort": [{ "fieldName1": "desc" }, { "fieldName2": "desc" }]
Wenn Sie den Richtungswert nicht angeben, wird standardmäßig der Wert asc verwendet. Für die aufsteigende Sortierung kann die folgende Kurzform verwendet werden:
"sort": [ "fieldName1", "fieldName2" ]
Eine typische Anforderung besteht darin, dass durch einen Selektor nach Inhalten gesucht wird und die Ergebnisse anschließend nach dem angegeben Feld in der bevorzugten Richtung sortiert werden.
Um die Sortierung zu verwenden, muss ein Index definiert werden, der die Sortierfelder enthält. Bei Verwendung von json index müssen die Felder in der gleichen Reihenfolge wie die Sortierung angegeben werden.
Gegenwärtig unterstützt IBM Cloudant Query nicht mehrere Felder mit unterschiedlichen Sortierreihenfolgen, sodass die Richtung für alle Felder entweder aufsteigend oder absteigend sein muss.
Wenn die Richtung aufsteigend ist, können Sie die Sortierfelder durch eine Zeichenfolge anstatt durch ein Objekt angeben.
Sortieren mit Textindizes
Für Feldnamen in Sortierabfragen gegen einen text Index, bei denen der Typ des zu sortierenden Feldes nicht bestimmt werden kann, kann es notwendig sein, einen Feldtyp anzugeben. Zum Beispiel:
"sort": [ { "<fieldname>:string": "asc" } ]
| Welcher Index wird von der Abfrage verwendet? | Feldtypanforderung |
|---|---|
| JSON-Index | Keine |
| Textindex aller Felder in allen Dokumenten | Geben Sie das Sortierfeld in der Abfrage an, wenn die Datenbank Dokumente enthält, in denen das Sortierfeld nur einen Typ hat. Geben Sie das Sortierfeld außerdem in der Abfrage an, wenn sie Dokumente enthält, in denen das Sortierfeld einen anderen Typ hat. |
| Jeder andere Textindex | Geben Sie den Typ aller Sortierfelder in der Abfrage an. |
Ein Textindex aller Felder in allen Dokumenten wird erstellt, wenn Sie die folgende Syntax verwenden:
"index": {}.
Die Sortierreihenfolge ist nicht definiert, wenn Felder unterschiedliche Datentypen enthalten. Dieses Merkmal ist ein wichtiger Unterschied zwischen Text- und Ansichtsindizes. Das Sortierverhalten für Felder mit unterschiedlichen Datentypen kann sich in zukünftigen Versionen ändern.
Seitenaufteilung
IBM Cloudant Query unterstützt die Paginierung über das Lesezeichenfeld ('bookmark'). Jede Antwort _find enthält ein Lesezeichen - ein Token, mit dessen Hilfe IBM Cloudant bestimmt, wo die Wiederaufnahme erfolgen soll, wenn spätere
Abfragen durchgeführt werden. Zum Abrufen des nächsten Satzes von Abfrageergebnissen fügen Sie das Lesezeichen, das in der vorherigen Antwort empfangen wurde, Ihrer nächsten Anforderung hinzu. Beachten Sie, dass der Selektor der gleiche bleiben
muss, da andernfalls nicht erwartete Ergebnisse empfangen werden. Zur rückläufigen Paginierung können Sie ein vorheriges Lesezeichen verwenden, um den vorherigen Satz von Ergebnissen zurückzugeben.
Das Vorhandensein eines Lesezeichens ist keine Garantie für weitere Ergebnisse. Sie können testen, ob das Ende der Ergebnismenge erreicht ist, indem Sie die Anzahl der Ergebnisse, die zurückgegeben wurden, mit der angeforderten Seitengröße vergleichen. Wenn die zurückgegebenen Ergebnisse weniger als die Begrenzung sind, wurden keine weiteren Ergebnisse in der Ergebnismenge zurückgegeben.
Hinweis auf die Verwendung eines bestimmten Index
Wenn Sie eine Abfrage anweisen wollen, einen bestimmten Index zu verwenden, fügen Sie der Abfrage den Parameter use_index hinzu. Dies ist ein Hinweis; wenn der Index nicht für die Abfrage verwendet werden kann, wird ein alternativer
Index verwendet.
Der Wert des Parameters use_index verwendet eines der folgenden Formate:
"use_index": "$DDOC""use_index": ["$DDOC","$INDEX_NAME"]
Diese Beispielabfrage zeigt das Hinting eines bestimmten Indexes mit use_index:
{
"selector": {
"$text": "Pacino",
"year": 2010
},
"use_index": "_design/32372935e14bed00cc6db4fc9efca0f1537d34a8"
}
Verwendung eines bestimmten Index erzwingen
Kombinieren Sie den Parameter allow_fallback mit use_index, um die Verwendung eines bestimmten Index zu erzwingen. Wenn der Index nicht für die Abfrage verwendet werden kann, gibt die Abfrage eine Fehlerantwort zurück.
Die Verwendung von "allow_fallback": false ohne Angabe von use_index verhindert die Verwendung des eingebauten Index _all_docs.
Diese Beispielabfrage zeigt das Erzwingen eines bestimmten Indexes durch die Verwendung von allow_fallback mit use_index:
{
"selector": {
"$text": "Pacino",
"year": 2010
},
"use_index": "_design/32372935e14bed00cc6db4fc9efca0f1537d34a8",
"allow_fallback": false
}