/TypeScript
Azure Cosmos DB 是全域散發的多模型資料庫服務,可支援檔、索引鍵/值、寬數據行和圖形資料庫。 此套件適用於 JavaScript/TypeScript 應用程式,以便與 SQL API 資料庫與其包含的 JSON 文件互動:
- 建立 Cosmos DB 資料庫並修改其設定
- 建立和修改容器以儲存 JSON 檔的集合
- 在容器中建立、讀取、更新和刪除專案 (JSON 檔案)
- 使用類似 SQL 的語法查詢資料庫中的檔
主要連結:
開始
先決條件
Azure 訂用帳戶和 Cosmos DB SQL API 帳戶
您必須擁有 Azure 訂用帳戶,以及 Cosmos DB 帳戶 (SQL API) 才能使用此套件。
如果您需要 Cosmos DB SQL API 帳戶,您可以使用 Azure Cloud Shell 使用此 Azure CLI 命令建立帳戶:
az cosmosdb create --resource-group <resource-group-name> --name <cosmos-database-account-name>
或者,您可以在 Azure 入口網站 中建立帳戶
NodeJS 的
此套件會透過 npm 散發,其預安裝於使用 LTS 版本的 NodeJS。
CORS
如果您需要針對瀏覽器進行開發,您必須為 Cosmos DB 帳戶設定 跨原始資源分享 (CORS) 規則。 請遵循連結檔中的指示,為您的 Cosmos DB 建立新的 CORS 規則。
安裝此套件
npm install @azure/cosmos
取得帳戶認證
您將需要 Cosmos DB 帳戶端點 和 金鑰。 您可以在 Azure 入口網站 中找到這些專案,或使用下列 Azure CLI 代碼段。 代碼段會格式化為Bash殼層。
az cosmosdb show --resource-group <your-resource-group> --name <your-account-name> --query documentEndpoint --output tsv
az cosmosdb keys list --resource-group <your-resource-group> --name <your-account-name> --query primaryMasterKey --output tsv
建立 CosmosClient 的實例
與 Cosmos DB 的互動會從 CosmosClient 類別的實例開始
import { CosmosClient } from "@azure/cosmos";
const endpoint = "https://your-account.documents.azure.com";
const key = "<database account masterkey>";
const client = new CosmosClient({ endpoint, key });
為了簡單起見,我們已將 key 和 endpoint 直接包含在程序代碼中,但您可能會想要從不在原始檔控制中的檔案載入這些專案,例如 dotenv 或從環境變數載入
在生產環境中,密鑰之類的秘密應該儲存在 Azure Key Vault
重要概念
初始化 CosmosClient之後,您就可以與 Cosmos DB 中的主要資源類型互動:
資料庫:Cosmos DB 帳戶可以包含多個資料庫。 當您建立資料庫時,您可以指定與文件互動時想要使用的 API:SQL、MongoDB、Gremlin、Cassandra 或 Azure 數據表。 使用 Database 物件來管理其容器。
容器:容器是 JSON 檔的集合。 您可以使用 Container 物件上的方法,在容器中建立(插入)、讀取、更新和刪除專案。
Item:專案是儲存在容器中的 JSON 檔。 每個項目都必須包含具有可唯一識別容器內專案之值的
id索引鍵。 如果您沒有提供id,SDK 將會自動產生一個。
如需這些資源的詳細資訊,請參閱 使用 Azure Cosmos 資料庫、容器和專案。
例子
下列各節提供數個代碼段,涵蓋一些最常見的Cosmos DB工作,包括:
建立資料庫
驗證 CosmosClient之後,您可以使用帳戶中的任何資源。 下列代碼段會建立NOSQL API 資料庫。
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" });
建立容器
此範例會建立具有預設設定的容器
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" });
使用分割區索引鍵
此範例顯示支援的各種分割區索引鍵類型。
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" });
await container.item("id", "1").read(); // string type
await container.item("id", 2).read(); // number type
await container.item("id", true).read(); // boolean type
await container.item("id", {}).read(); // None type
await container.item("id", undefined).read(); // None type
await container.item("id", null).read(); // null type
如果數據分割索引鍵是由單一值所組成,它可以提供為常值或陣列。
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" });
await container.item("id", "1").read();
await container.item("id", ["1"]).read();
如果分割區索引鍵是由多個值所組成,則應該以數位的形式提供。
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" });
await container.item("id", ["a", "b"]).read();
await container.item("id", ["a", 2]).read();
await container.item("id", [{}, {}]).read();
await container.item("id", ["a", {}]).read();
await container.item("id", [2, null]).read();
插入專案
若要將專案插入容器中,請將包含資料的物件傳遞至items.upsert 。 Azure Cosmos DB 服務要求每個專案都有 id 密鑰。 如果您沒有提供,SDK 將會自動產生 id。
此範例會將數個專案插入容器中
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 cities = [
{ id: "1", name: "Olympia", state: "WA", isCapitol: true },
{ id: "2", name: "Redmond", state: "WA", isCapitol: false },
{ id: "3", name: "Chicago", state: "IL", isCapitol: false },
];
for (const city of cities) {
await container.items.create(city);
}
讀取專案
若要從容器讀取單一專案,請使用 Item.read。 這是比使用 SQL 查詢 id成本較低的作業。
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" });
await container.item("1", "1").read();
容器上具有階層式分割區索引鍵的 CRUD
使用階層式分割區索引鍵建立容器
import { CosmosClient, PartitionKeyDefinitionVersion, PartitionKeyKind } 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 containerDefinition = {
id: "Test Container",
partitionKey: {
paths: ["/name", "/address/zip"],
version: PartitionKeyDefinitionVersion.V2,
kind: PartitionKeyKind.MultiHash,
},
};
const { container } = await database.containers.createIfNotExists(containerDefinition);
使用定義為 的階層式分割區索引鍵插入專案 - ["/name", "/address/zip"]
import { CosmosClient, PartitionKeyDefinitionVersion, PartitionKeyKind } 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 containerDefinition = {
id: "Test Database",
partitionKey: {
paths: ["/name", "/address/zip"],
version: PartitionKeyDefinitionVersion.V2,
kind: PartitionKeyKind.MultiHash,
},
};
const { container } = await database.containers.createIfNotExists(containerDefinition);
const item = {
id: "1",
name: "foo",
address: {
zip: 100,
},
active: true,
};
await container.items.create(item);
若要從定義為階層式分割索引鍵的容器讀取單一專案 - ["/name", "/address/zip"],
import { CosmosClient, PartitionKeyDefinitionVersion, PartitionKeyKind } 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 containerDefinition = {
id: "Test Database",
partitionKey: {
paths: ["/name", "/address/zip"],
version: PartitionKeyDefinitionVersion.V2,
kind: PartitionKeyKind.MultiHash,
},
};
const { container } = await database.containers.createIfNotExists(containerDefinition);
await container.item("1", ["foo", 100]).read();
使用定義為階層式數據分割索引鍵的專案查詢專案 - ["/name", "/address/zip"],
import { CosmosClient, PartitionKeyDefinitionVersion, PartitionKeyKind } 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 containerDefinition = {
id: "Test Database",
partitionKey: {
paths: ["/name", "/address/zip"],
version: PartitionKeyDefinitionVersion.V2,
kind: PartitionKeyKind.MultiHash,
},
};
const { container } = await database.containers.createIfNotExists(containerDefinition);
const { resources } = await container.items
.query("SELECT * from c WHERE c.active = true", {
partitionKey: ["foo", 100],
})
.fetchAll();
刪除專案
若要從容器中刪除專案,請使用 Item.delete。
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" });
// Delete the first item returned by the query above
await container.item("1").delete();
查詢資料庫
Cosmos DB SQL API 資料庫支援使用類似 SQL 語法來查詢容器中的專案,Items.query:
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();
將包含參數及其值的對象傳遞至 Items.query ,以執行參數化查詢:
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({
query: "SELECT * from c WHERE c.isCapitol = @isCapitol",
parameters: [{ name: "@isCapitol", value: true }],
})
.fetchAll();
如需使用 SQL API 查詢 Cosmos DB 資料庫的詳細資訊,請參閱 使用 SQL 查詢 Azure Cosmos DB 資料。
變更摘要提取模型
您可以擷取分割區索引鍵、摘要範圍或整個容器的變更摘要。
若要處理變更摘要,請建立 ChangeFeedPullModelIterator實例。 當您一開始建立 ChangeFeedPullModelIterator時,您必須在 changeFeedStartFrom 內指定必要的 ChangeFeedIteratorOptions 值,其中包含讀取變更的起始位置,以及要擷取變更的資源(分割區索引鍵或 FeedRange)。 您可以選擇在 maxItemCount 中使用 ChangeFeedIteratorOptions,以設定每個頁面收到的項目數目上限。
注意:如果未指定任何 changeFeedStartFrom 值,則會從 Now() 擷取整個容器的 changefeed。
變更摘要有四個起始位置:
Beginning
import { ChangeFeedStartFrom } from "@azure/cosmos";
const options = {
changeFeedStartFrom: ChangeFeedStartFrom.Beginning(),
};
Time
import { ChangeFeedStartFrom } from "@azure/cosmos";
const time = new Date("2023/09/11"); // some sample date
const options = {
changeFeedStartFrom: ChangeFeedStartFrom.Time(time),
};
Now
import { ChangeFeedStartFrom } from "@azure/cosmos";
// Signals the iterator to read changefeed from this moment onward.
const options = {
changeFeedStartFrom: ChangeFeedStartFrom.Now(),
};
Continuation
import { ChangeFeedStartFrom } from "@azure/cosmos";
// Signals the iterator to read changefeed from a saved point.
const continuationToken = "some continuation token received from previous request";
const options = {
changeFeedStartFrom: ChangeFeedStartFrom.Continuation(continuationToken),
};
以下是擷取分割區索引鍵變更摘要的範例
import {
CosmosClient,
PartitionKeyDefinitionVersion,
PartitionKeyKind,
ChangeFeedStartFrom,
} 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 containerDefinition = {
id: "Test Database",
partitionKey: {
paths: ["/name", "/address/zip"],
version: PartitionKeyDefinitionVersion.V2,
kind: PartitionKeyKind.MultiHash,
},
};
const { container } = await database.containers.createIfNotExists(containerDefinition);
const partitionKey = "some-partition-Key-value";
const options = {
changeFeedStartFrom: ChangeFeedStartFrom.Beginning(partitionKey),
};
const iterator = container.items.getChangeFeedIterator(options);
while (iterator.hasMoreResults) {
const response = await iterator.readNext();
// process this response
}
因為變更摘要實際上是包含所有未來寫入和更新的無限專案清單,因此 hasMoreResults 的值一律 true。 當您嘗試讀取變更摘要且沒有可用的新變更時,您會收到具有 NotModified 狀態的回應。
如需更詳細的使用方針和變更摘要範例,請參閱這裡。
使用排除的位置
excludedLocations要求層級的選項可讓使用者指定一或多個應從服務要求中排除的 Azure 區域。 這適用於使用者因合規性、延遲或可用性問題而想要避開特定區域的案例。 設定時,Cosmos DB 會將要求路由傳送至其他可用的區域,以改善對資料落地和容錯移轉行為的控制。
excludedLocations 只有在設定為 true 時 enableEndPointDiscovery 才會套用。
此範例顯示支援排除位置的各種 API。
import { CosmosClient, ChangeFeedStartFrom } 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 city = { id: "1", name: "Olympia", state: "WA" };
await container.items.upsert(city, { excludedLocations: ["Test Region"] });
const iterator = container.items.getChangeFeedIterator({
excludedLocations: ["Test Region"],
maxItemCount: 1,
changeFeedStartFrom: ChangeFeedStartFrom.Beginning(),
});
const response = await iterator.readNext();
錯誤處理
SDK 會產生作業期間可能發生的各種錯誤類型。
- 如果作業的回應傳回錯誤碼為 =400,則會擲回
ErrorResponse>。 - 如果因逾時而於內部呼叫 Abort,則會擲回
TimeoutError。 - 如果任何使用者通過的訊號造成中止,就會擲回
AbortError。 -
RestError因為網路問題而造成基礎系統呼叫失敗時擲回。 - 任何 devDependencies 所產生的錯誤。 例如
@azure/identity套件可能會擲回CredentialUnavailableError。
以下是處理類型 ErrorResponse、TimeoutError、AbortError和 RestError的錯誤範例。
import { ErrorResponse, RestError } from "@azure/cosmos";
try {
// some code
} catch (err) {
if (err instanceof ErrorResponse) {
// some specific error handling.
} else if (err instanceof RestError) {
// some specific error handling.
}
// handle other type of errors in similar way.
else {
// for any other error.
}
}
請務必正確處理這些錯誤,以確保您的應用程式可以正常復原任何失敗,並繼續如預期般運作。 如需這些錯誤及其可能解決方案的詳細資訊,請參閱這裡。
故障排除
常規
當您與服務傳回的 Cosmos DB 錯誤互動時,會對應至針對 REST API 要求傳回的相同 HTTP 狀態代碼:
Azure Cosmos DB 的 HTTP 狀態代碼
衝突
例如,如果您嘗試使用已在Cosmos DB資料庫中使用的 id 建立專案,則會傳回 409 錯誤,指出衝突。 在下列代碼段中,會藉由攔截例外狀況並顯示錯誤的其他資訊,以正常方式處理錯誤。
import { CosmosClient, ErrorResponse, RestError } 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" });
try {
await container.items.create({ id: "existing-item-id" });
} catch (error) {
const err = error as ErrorResponse | RestError;
if (err.code === 409) {
console.log("There was a conflict with an existing item");
}
}
轉譯
Azure SDK 的設計訴求是支援 ES5 JavaScript 語法和 LTS 版本的 Node.js。 如果您需要舊版 JavaScript 運行時間的支援,例如 Internet Explorer 或 Node 6,您必須在建置程式中轉譯 SDK 程式代碼。
使用重試處理暫時性錯誤
使用 Cosmos DB 時,您可能會遇到暫時性失敗,原因是服務 強制執行
伐木
啟用記錄可能有助於找出有關失敗的實用資訊。 若要查看 HTTP 要求和回應的記錄,請將 AZURE_LOG_LEVEL 環境變數設定為 info。 或者,可以在運行時間啟用記錄,方法是在 setLogLevel中呼叫 @azure/logger。 使用 AZURE_LOG_LEVEL 請務必在初始化記錄連結庫之前加以設定。
在理想情況下,如果使用類似 dotenv 的連結庫,請確定這類連結庫在記錄連結庫之前已初始化。
import { setLogLevel } from "@azure/logger";
setLogLevel("info");
如需如何啟用記錄的詳細指示,請參閱
診斷
Cosmos 診斷功能提供您所有用戶端作業的增強見解。 CosmosDiagnostics 物件會新增至回應所有客戶端作業。 如
- 點查閱作業回應 -
item.read()、container.create()、database.delete() - 查詢作業回應 -
queryIterator.fetchAll()、 - 大量與批次作業 -
item.batch()。 - 錯誤/例外狀況回應物件。
CosmosDiagnostics 物件會新增至回應所有客戶端作業。 有 3 個 Cosmos 診斷層級、資訊、偵錯和偵錯-unsafe。 其中只有資訊適用於生產系統,而偵錯和偵錯不安全則表示要在開發和偵錯期間使用,因為它們會耗用大量較高的資源。 Cosmos 診斷層級可透過 2 種方式設定
- 以程序設計方式
import { CosmosClient, CosmosDbDiagnosticLevel } from "@azure/cosmos";
const endpoint = "https://your-account.documents.azure.com";
const key = "<database account masterkey>";
const client = new CosmosClient({
endpoint,
key,
diagnosticLevel: CosmosDbDiagnosticLevel.debug,
});
- 使用環境變數。 (環境變數所設定的診斷層級優先於透過客戶端選項進行設定。
export AZURE_COSMOSDB_DIAGNOSTICS_LEVEL="debug"
Cosmos 診斷有三個成員
ClientSideRequestStatistics 類型:包含匯總診斷詳細數據,包括元數據查閱、重試、已連絡的端點,以及承載大小和持續時間等要求和回應統計數據。 (一律收集,可用於生產系統。
DiagnosticNode:這是一種類似樹狀的結構,可擷取詳細的診斷資訊。 類似於
har瀏覽器中的錄製。 此功能預設為停用,且僅供偵錯非生產環境。 (收集在診斷層級偵錯和偵錯不安全)ClientConfig:擷取用戶端初始化期間與用戶端組態設定相關的基本資訊。 (收集在診斷層級偵錯和偵錯不安全)
請務必永遠不要在生產環境中將診斷層級設定為 debug-unsafe,因為此層級 CosmosDiagnostics 擷取要求和響應承載,而且如果您選擇記錄它(預設會記錄 @azure/loggerverbose 層級)。 這些承載可能會在記錄接收中擷取。
使用診斷
- 因為
diagnostics會新增至所有 Response 物件。 您可以依程序設計方式存取CosmosDiagnostic,如下所示。
import {
CosmosClient,
CosmosDbDiagnosticLevel,
OperationInput,
BulkOperationType,
} from "@azure/cosmos";
const endpoint = "https://your-account.documents.azure.com";
const key = "<database account masterkey>";
const client = new CosmosClient({
endpoint,
key,
diagnosticLevel: CosmosDbDiagnosticLevel.debug,
});
const { database } = await client.databases.createIfNotExists({ id: "Test Database" });
// For point look up operations
const { container, diagnostics: containerCreateDiagnostic } =
await database.containers.createIfNotExists({
id: "<container-id>",
partitionKey: {
paths: ["/key1"],
},
});
// For Batch operations
const operations: OperationInput[] = [
{
operationType: BulkOperationType.Create,
resourceBody: { id: "A", key: "A", school: "high" },
},
];
const response = await container.items.batch(operations, "A");
// For query operations
const queryIterator = container.items.query("select * from c");
const { resources, diagnostics } = await queryIterator.fetchAll();
// While error handling
try {
// Some operation that might fail
} catch (err) {
const diagnostics = err.diagnostics;
}
- 您也可以使用
diagnostics記錄@azure/logger,診斷一律會使用@azure/logger層級verbose記錄。 因此,如果您將診斷層級設定為debug或debug-unsafe,並將@azure/logger層級設定為verbose,則會記錄diagnostics。
後續步驟
更多範例程序代碼
SDK GitHub 存放庫中有數個範例 可供您使用。 這些範例提供使用 Cosmos DB 時常見之其他案例的範例程式代碼:
- 資料庫作業
- 容器作業
- 項目作業
- 設定索引編製
- 讀取容器變更摘要
- 預存程式
- 變更資料庫/容器輸送量設定
- 多重區域寫入作業
局限性
目前不支援下列功能 。 如需替代選項,請查看下方的 因應措施 一節。
- 瀏覽器環境目前不支援用戶端加密。
資料平面限制:
- 來自 DISTINCT 子查詢的 COUNT 查詢
- 直接 TCP 模式存取
- 匯總跨分割區查詢,例如排序、計數和相異,不支援接續令牌。 可串流查詢,例如SELECT * FROM WHERE <條件>,支持延續令牌。 請參閱一節,以了解在沒有接續令牌的情況下執行不可串流查詢。
- 變更摘要:處理器
- 變更摘要:讀取多個分割區索引鍵值
- 混合類型的跨分割區 ORDER BY
- 取得 CollectionSizeUsage、DatabaseUsage 和 DocumentUsage 計量
- 建立地理空間索引
- 更新自動調整輸送量
控制平面限制:
因應措施
跨分割區查詢的接續令牌
您可以使用 側車模式,透過接續令牌支援來達成跨分割區查詢。 此模式也可以讓應用程式由異質元件和技術組成。
執行不可流式傳輸的跨分區查詢
若要在不使用接續令牌的情況下執行不可串流查詢,您可以使用必要的查詢規格和選項來建立查詢反覆運算器。 下列範例程式代碼示範如何使用查詢反覆運算器來擷取所有結果,而不需要接續令牌:
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
}
此方法也可用於可串流查詢。
控制平面作業
一般而言,您可以使用 Azure 入口網站、Azure Cosmos DB 資源提供者 REST API、Azure CLI 或 PowerShell,以取得控制平面不支援的限制。
其他檔
有關 Cosmos DB 服務的更廣泛文件,請參閱有關 learn.microsoft.com 的 Azure Cosmos DB 文件 。
有用的連結
- 歡迎使用 Azure Cosmos DB
- 快速入門
- 教學課程
- 範例
- Azure Cosmos DB 服務資源模型簡介
- Azure Cosmos DB Service SQL API 簡介
- 數據分割
- API 檔
貢獻
如果您想要參與此連結庫,請閱讀 參與指南,以深入瞭解如何建置和測試程序代碼。