Freigeben über


QueryIterator class

Stellt ein QueryIterator-Objekt dar, eine Implementierung der Feed- oder Abfrageantwort, die das Durchlaufen und Durchlaufen der Antwort im Azure Cosmos DB-Datenbankdienst ermöglicht.

Methoden

fetchAll()

Ruft alle Seiten für die Abfrage ab und gibt einen einzelnen FeedResponse zurück.

Beispiel

import { CosmosClient } from "@azure/cosmos";

const endpoint = "https://your-account.documents.azure.com";
const key = "<database account masterkey>";
const client = new CosmosClient({ endpoint, key });

const { database } = await client.databases.createIfNotExists({ id: "Test Database" });

const { container } = await database.containers.createIfNotExists({ id: "Test Container" });

const { resources } = await container.items
  .query("SELECT * from c WHERE c.isCapitol = true")
  .fetchAll();
fetchNext()

Rufen Sie den nächsten Batch aus dem Feed ab.

Dies kann je nach Ihren Einstellungen und dem Abfragetyp mehr Seiten aus dem Back-End abrufen oder nicht. Aggregierte Abfragen rufen in der Regel alle Back-End-Seiten ab, bevor der erste Batch von Antworten zurückgegeben wird.

Beispiel

import { CosmosClient } from "@azure/cosmos";

const endpoint = "https://your-account.documents.azure.com";
const key = "<database account masterkey>";
const client = new CosmosClient({ endpoint, key });

const { database } = await client.databases.createIfNotExists({ id: "Test Database" });

const { container } = await database.containers.createIfNotExists({ id: "Test Container" });

const querySpec = {
  query: "SELECT c.status, COUNT(c.id) AS count FROM c GROUP BY c.status",
};
const queryOptions = {
  maxItemCount: 10, // maximum number of items to return per page
  enableCrossPartitionQuery: true,
};
const queryIterator = container.items.query(querySpec, queryOptions);
while (queryIterator.hasMoreResults()) {
  const { resources: result } = await queryIterator.fetchNext();
  // process results
}
getAsyncIterator()

Ruft einen asynchronen Iterator ab, der Ergebnisse bis zum Abschluss liefert.

HINWEIS: AsyncIterators sind ein sehr neues Feature, und Möglicherweise müssen Sie polyfils/etc. verwenden, um sie in Ihrem Code zu verwenden.

Wenn Sie TypeScript verwenden, können Sie das folgende Polyfill verwenden, solange Sie ES6 oder höher als Ziel verwenden und auf Node 6 oder höher ausgeführt werden.

if (!Symbol || !Symbol.asyncIterator) {
  (Symbol as any).asyncIterator = Symbol.for("Symbol.asyncIterator");
}

Beispiel

Durchlaufen aller Datenbanken

import { CosmosClient } from "@azure/cosmos";

const endpoint = "https://your-account.documents.azure.com";
const key = "<database account masterkey>";
const client = new CosmosClient({ endpoint, key });

for await (const { resources: db } of client.databases.readAll().getAsyncIterator()) {
  console.log(`Got ${db} from AsyncIterator`);
}
hasMoreResults()

Ermitteln Sie, ob noch verbleibende Ressourcen vorhanden sind, die basierend auf dem Wert des Fortsetzungstokens oder den Elementen im aktuellen Batch im QueryIterator verarbeitet werden sollen.

reset()

Setzen Sie den QueryIterator auf den Anfang zurück und löschen Sie alle darin enthaltenen Ressourcen.

Beispiel

import { CosmosClient } from "@azure/cosmos";

const endpoint = "https://your-account.documents.azure.com";
const key = "<database account masterkey>";
const client = new CosmosClient({ endpoint, key });
const { database } = await client.databases.createIfNotExists({ id: "Test Database" });
const { container } = await database.containers.createIfNotExists({ id: "Test Container" });

const querySpec = {
  query: "SELECT c.status, COUNT(c.id) AS count FROM c GROUP BY c.status",
};
const queryIterator = container.items.query(querySpec);
while (queryIterator.hasMoreResults()) {
  const { resources: result } = await queryIterator.fetchNext();
  // process results
}
queryIterator.reset();

Details zur Methode

fetchAll()

Ruft alle Seiten für die Abfrage ab und gibt einen einzelnen FeedResponse zurück.

Beispiel

import { CosmosClient } from "@azure/cosmos";

const endpoint = "https://your-account.documents.azure.com";
const key = "<database account masterkey>";
const client = new CosmosClient({ endpoint, key });

const { database } = await client.databases.createIfNotExists({ id: "Test Database" });

const { container } = await database.containers.createIfNotExists({ id: "Test Container" });

const { resources } = await container.items
  .query("SELECT * from c WHERE c.isCapitol = true")
  .fetchAll();
function fetchAll(): Promise<FeedResponse<T>>

Gibt zurück

Promise<FeedResponse<T>>

fetchNext()

Rufen Sie den nächsten Batch aus dem Feed ab.

Dies kann je nach Ihren Einstellungen und dem Abfragetyp mehr Seiten aus dem Back-End abrufen oder nicht. Aggregierte Abfragen rufen in der Regel alle Back-End-Seiten ab, bevor der erste Batch von Antworten zurückgegeben wird.

Beispiel

import { CosmosClient } from "@azure/cosmos";

const endpoint = "https://your-account.documents.azure.com";
const key = "<database account masterkey>";
const client = new CosmosClient({ endpoint, key });

const { database } = await client.databases.createIfNotExists({ id: "Test Database" });

const { container } = await database.containers.createIfNotExists({ id: "Test Container" });

const querySpec = {
  query: "SELECT c.status, COUNT(c.id) AS count FROM c GROUP BY c.status",
};
const queryOptions = {
  maxItemCount: 10, // maximum number of items to return per page
  enableCrossPartitionQuery: true,
};
const queryIterator = container.items.query(querySpec, queryOptions);
while (queryIterator.hasMoreResults()) {
  const { resources: result } = await queryIterator.fetchNext();
  // process results
}
function fetchNext(): Promise<FeedResponse<T>>

Gibt zurück

Promise<FeedResponse<T>>

getAsyncIterator()

Ruft einen asynchronen Iterator ab, der Ergebnisse bis zum Abschluss liefert.

HINWEIS: AsyncIterators sind ein sehr neues Feature, und Möglicherweise müssen Sie polyfils/etc. verwenden, um sie in Ihrem Code zu verwenden.

Wenn Sie TypeScript verwenden, können Sie das folgende Polyfill verwenden, solange Sie ES6 oder höher als Ziel verwenden und auf Node 6 oder höher ausgeführt werden.

if (!Symbol || !Symbol.asyncIterator) {
  (Symbol as any).asyncIterator = Symbol.for("Symbol.asyncIterator");
}

Beispiel

Durchlaufen aller Datenbanken

import { CosmosClient } from "@azure/cosmos";

const endpoint = "https://your-account.documents.azure.com";
const key = "<database account masterkey>";
const client = new CosmosClient({ endpoint, key });

for await (const { resources: db } of client.databases.readAll().getAsyncIterator()) {
  console.log(`Got ${db} from AsyncIterator`);
}
function getAsyncIterator(): AsyncIterable<FeedResponse<T>>

Gibt zurück

AsyncIterable<FeedResponse<T>>

hasMoreResults()

Ermitteln Sie, ob noch verbleibende Ressourcen vorhanden sind, die basierend auf dem Wert des Fortsetzungstokens oder den Elementen im aktuellen Batch im QueryIterator verarbeitet werden sollen.

function hasMoreResults(): boolean

Gibt zurück

boolean

"true", wenn im QueryIterator andere Elemente verarbeitet werden sollen.

reset()

Setzen Sie den QueryIterator auf den Anfang zurück und löschen Sie alle darin enthaltenen Ressourcen.

Beispiel

import { CosmosClient } from "@azure/cosmos";

const endpoint = "https://your-account.documents.azure.com";
const key = "<database account masterkey>";
const client = new CosmosClient({ endpoint, key });
const { database } = await client.databases.createIfNotExists({ id: "Test Database" });
const { container } = await database.containers.createIfNotExists({ id: "Test Container" });

const querySpec = {
  query: "SELECT c.status, COUNT(c.id) AS count FROM c GROUP BY c.status",
};
const queryIterator = container.items.query(querySpec);
while (queryIterator.hasMoreResults()) {
  const { resources: result } = await queryIterator.fetchNext();
  // process results
}
queryIterator.reset();
function reset()