Dela via


QueryIterator class

Representerar ett QueryIterator-objekt, en implementering av feed- eller frågesvar som möjliggör bläddringar och iterering över svaret i Azure Cosmos DB-databastjänsten.

Metoder

fetchAll()

Hämta alla sidor för frågan och returnera ett enda FeedResponse.

Exempel

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

Hämta nästa batch från feeden.

Detta kanske eller kanske inte hämtar fler sidor från serverdelen beroende på dina inställningar och typen av fråga. Aggregerade frågor hämtar vanligtvis alla serverdelssidor innan du returnerar den första batchen med svar.

Exempel

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

Hämtar en asynkron iterator som ger resultat tills den är klar.

Obs! AsyncIterators är en mycket ny funktion och du kan behöva använda polyfils/etc. för att kunna använda dem i koden.

Om du använder TypeScript kan du använda följande polyfill så länge du riktar in dig på ES6 eller senare och körs på Nod 6 eller senare.

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

Exempel

Iterera över alla databaser

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

Kontrollera om det fortfarande finns återstående resurser att bearbeta baserat på värdet för fortsättningstoken eller de element som finns kvar i den aktuella batchen i QueryIterator.

reset()

Återställ QueryIterator till början och rensa alla resurser i den

Exempel

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

Metodinformation

fetchAll()

Hämta alla sidor för frågan och returnera ett enda FeedResponse.

Exempel

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

Returer

Promise<FeedResponse<T>>

fetchNext()

Hämta nästa batch från feeden.

Detta kanske eller kanske inte hämtar fler sidor från serverdelen beroende på dina inställningar och typen av fråga. Aggregerade frågor hämtar vanligtvis alla serverdelssidor innan du returnerar den första batchen med svar.

Exempel

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

Returer

Promise<FeedResponse<T>>

getAsyncIterator()

Hämtar en asynkron iterator som ger resultat tills den är klar.

Obs! AsyncIterators är en mycket ny funktion och du kan behöva använda polyfils/etc. för att kunna använda dem i koden.

Om du använder TypeScript kan du använda följande polyfill så länge du riktar in dig på ES6 eller senare och körs på Nod 6 eller senare.

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

Exempel

Iterera över alla databaser

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

Returer

AsyncIterable<FeedResponse<T>>

hasMoreResults()

Kontrollera om det fortfarande finns återstående resurser att bearbeta baserat på värdet för fortsättningstoken eller de element som finns kvar i den aktuella batchen i QueryIterator.

function hasMoreResults(): boolean

Returer

boolean

sant om det finns andra element att bearbeta i QueryIterator.

reset()

Återställ QueryIterator till början och rensa alla resurser i den

Exempel

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