次の方法で共有


QueryIterator class

QueryIterator オブジェクトを表します。これは、Azure Cosmos DB データベース サービスでのトラバーサルと応答の反復処理を可能にするフィードまたはクエリ応答の実装です。

メソッド

fetchAll()

クエリのすべてのページをフェッチし、1 つの FeedResponse を返します。

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

フィードから次のバッチを取得します。

これは、設定とクエリの種類によっては、バックエンドからより多くのページをフェッチする場合とフェッチしない場合があります。 通常、集計クエリでは、応答の最初のバッチを返す前にすべてのバックエンド ページがフェッチされます。

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

完了するまで結果を生成する非同期反復子を取得します。

注: AsyncIterator は非常に新しい機能であり、コードで使用するには polyfils などを使用する必要がある場合があります。

TypeScript を使用している場合は、ES6 以降をターゲットとし、ノード 6 以降で実行している限り、次のポリフィルを使用できます。

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

すべてのデータベースを反復処理する

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

継続トークンの値または QueryIterator の現在のバッチに残っている要素に基づいて、処理する残りのリソースがあるかどうかを判断します。

reset()

QueryIterator を先頭にリセットし、その中のすべてのリソースをクリアします

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

メソッドの詳細

fetchAll()

クエリのすべてのページをフェッチし、1 つの FeedResponse を返します。

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

戻り値

Promise<FeedResponse<T>>

fetchNext()

フィードから次のバッチを取得します。

これは、設定とクエリの種類によっては、バックエンドからより多くのページをフェッチする場合とフェッチしない場合があります。 通常、集計クエリでは、応答の最初のバッチを返す前にすべてのバックエンド ページがフェッチされます。

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

戻り値

Promise<FeedResponse<T>>

getAsyncIterator()

完了するまで結果を生成する非同期反復子を取得します。

注: AsyncIterator は非常に新しい機能であり、コードで使用するには polyfils などを使用する必要がある場合があります。

TypeScript を使用している場合は、ES6 以降をターゲットとし、ノード 6 以降で実行している限り、次のポリフィルを使用できます。

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

すべてのデータベースを反復処理する

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

戻り値

AsyncIterable<FeedResponse<T>>

hasMoreResults()

継続トークンの値または QueryIterator の現在のバッチに残っている要素に基づいて、処理する残りのリソースがあるかどうかを判断します。

function hasMoreResults(): boolean

戻り値

boolean

QueryIterator で処理する他の要素がある場合は true。

reset()

QueryIterator を先頭にリセットし、その中のすべてのリソースをクリアします

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