Compartilhar via


QueryIterator class

Representa um objeto QueryIterator, uma implementação de feed ou resposta de consulta que permite a passagem e a iteração sobre a resposta no serviço de banco de dados do Azure Cosmos DB.

Métodos

fetchAll()

Busque todas as páginas da consulta e retorne um único FeedResponse.

exemplo

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

Recupere o próximo lote do feed.

Isso pode ou não buscar mais páginas do back-end dependendo das configurações e do tipo de consulta. As consultas de agregação geralmente buscarão todas as páginas de back-end antes de retornar o primeiro lote de respostas.

exemplo

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

Obtém um iterador assíncrono que produzirá resultados até a conclusão.

OBSERVAÇÃO: Os AsyncIterators são um recurso muito novo e talvez seja necessário usar polyfils/etc. para usá-los em seu código.

Se você estiver usando o TypeScript, poderá usar o polyfill a seguir, desde que você direcione o ES6 ou superior e esteja em execução no Nó 6 ou superior.

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

exemplo

Iterar em todos os bancos de dados

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

Determine se ainda há recursos restantes a serem processados com base no valor do token de continuação ou nos elementos restantes no lote atual no QueryIterator.

reset()

Redefinir o QueryIterator para o início e limpar todos os recursos dentro dele

exemplo

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

Detalhes do método

fetchAll()

Busque todas as páginas da consulta e retorne um único FeedResponse.

exemplo

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

Retornos

Promise<FeedResponse<T>>

fetchNext()

Recupere o próximo lote do feed.

Isso pode ou não buscar mais páginas do back-end dependendo das configurações e do tipo de consulta. As consultas de agregação geralmente buscarão todas as páginas de back-end antes de retornar o primeiro lote de respostas.

exemplo

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

Retornos

Promise<FeedResponse<T>>

getAsyncIterator()

Obtém um iterador assíncrono que produzirá resultados até a conclusão.

OBSERVAÇÃO: Os AsyncIterators são um recurso muito novo e talvez seja necessário usar polyfils/etc. para usá-los em seu código.

Se você estiver usando o TypeScript, poderá usar o polyfill a seguir, desde que você direcione o ES6 ou superior e esteja em execução no Nó 6 ou superior.

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

exemplo

Iterar em todos os bancos de dados

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

Retornos

AsyncIterable<FeedResponse<T>>

hasMoreResults()

Determine se ainda há recursos restantes a serem processados com base no valor do token de continuação ou nos elementos restantes no lote atual no QueryIterator.

function hasMoreResults(): boolean

Retornos

boolean

true se houver outros elementos a serem processados no QueryIterator.

reset()

Redefinir o QueryIterator para o início e limpar todos os recursos dentro dele

exemplo

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