Condividi tramite


QueryIterator class

Rappresenta un oggetto QueryIterator, un'implementazione di feed o risposta di query che consente l'attraversamento e l'iterazione della risposta nel servizio di database di Azure Cosmos DB.

Metodi

fetchAll()

Recuperare tutte le pagine per la query e restituire un singolo feedResponse.

esempio di

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()

Recuperare il batch successivo dal feed.

Questo può o non recuperare più pagine dal back-end a seconda delle impostazioni e del tipo di query. Le query di aggregazione recupereranno in genere tutte le pagine back-end prima di restituire il primo batch di risposte.

esempio di

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()

Ottiene un iteratore asincrono che restituirà risultati fino al completamento.

NOTA: AsyncIterators è una funzionalità molto nuova e potrebbe essere necessario usare polyfils/etc. per usarli nel codice.

Se si usa TypeScript, è possibile usare il polyfill seguente, purché si usi ES6 o versione successiva e che sia in esecuzione nel nodo 6 o versione successiva.

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

esempio di

Eseguire l'iterazione su tutti i database

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()

Determinare se sono ancora presenti risorse rimanenti da elaborare in base al valore del token di continuazione o agli elementi rimanenti nel batch corrente in QueryIterator.

reset()

Reimpostare QueryIterator all'inizio e cancellare tutte le risorse al suo interno

esempio di

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();

Dettagli metodo

fetchAll()

Recuperare tutte le pagine per la query e restituire un singolo feedResponse.

esempio di

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>>

Restituisce

Promise<FeedResponse<T>>

fetchNext()

Recuperare il batch successivo dal feed.

Questo può o non recuperare più pagine dal back-end a seconda delle impostazioni e del tipo di query. Le query di aggregazione recupereranno in genere tutte le pagine back-end prima di restituire il primo batch di risposte.

esempio di

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>>

Restituisce

Promise<FeedResponse<T>>

getAsyncIterator()

Ottiene un iteratore asincrono che restituirà risultati fino al completamento.

NOTA: AsyncIterators è una funzionalità molto nuova e potrebbe essere necessario usare polyfils/etc. per usarli nel codice.

Se si usa TypeScript, è possibile usare il polyfill seguente, purché si usi ES6 o versione successiva e che sia in esecuzione nel nodo 6 o versione successiva.

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

esempio di

Eseguire l'iterazione su tutti i database

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>>

Restituisce

AsyncIterable<FeedResponse<T>>

hasMoreResults()

Determinare se sono ancora presenti risorse rimanenti da elaborare in base al valore del token di continuazione o agli elementi rimanenti nel batch corrente in QueryIterator.

function hasMoreResults(): boolean

Restituisce

boolean

true se sono presenti altri elementi da elaborare in QueryIterator.

reset()

Reimpostare QueryIterator all'inizio e cancellare tutte le risorse al suo interno

esempio di

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()