SuperAPI AI 工具集

azure-cosmos-ts

数据与分析

查看项目

更新于 10-16 01:58

技能介绍

用途

@azure/cosmos 是 Azure Cosmos DB NoSQL API 的数据平面(Data Plane)SDK,面向 JavaScript/TypeScript 开发者,用于对文档执行 CRUD、查询、批量操作与存储过程等操作。

需要注意数据平面与管理平面的区别:本 SDK(@azure/cosmos)负责文档 CRUD、查询、存储过程;而创建账户、数据库、容器等管理操作需使用管理平面 SDK(@azure/arm-cosmosdb,通过 ARM)。

安装与环境

安装命令:

npm install @azure/cosmos @azure/identity

当前版本:4.9.0;Node.js 要求:>= 20.0.0。

环境变量示例:

COSMOS_ENDPOINT=https://<account>.documents.azure.com:443/ COSMOS_DATABASE=<database-name> COSMOS_CONTAINER=<container-name>

仅密钥认证时使用(推荐优先使用 AAD)

COSMOS_KEY=<account-key>

认证方式

推荐使用 AAD 配合 DefaultAzureCredential:

import { CosmosClient } from "@azure/cosmos"; import { DefaultAzureCredential } from "@azure/identity";

const client = new CosmosClient({ endpoint: process.env.COSMOS_ENDPOINT!, aadCredentials: new DefaultAzureCredential(), });

也可使用密钥认证(端点 + 密钥,或连接字符串):

import { CosmosClient } from "@azure/cosmos";

// 方式一:端点 + 密钥 const client = new CosmosClient({ endpoint: process.env.COSMOS_ENDPOINT!, key: process.env.COSMOS_KEY!, });

// 方式二:连接字符串 const client = new CosmosClient(process.env.COSMOS_CONNECTION_STRING!);

资源层级

CosmosClient → Database → Container → Items(文档)、Scripts(存储过程、触发器、UDF)、Conflicts。

主要能力

  • 数据库与容器创建:使用 databases.createIfNotExists 与 containers.createIfNotExists,可指定分区键路径。
  • 文档操作:create、read、replace(更新)、upsert、delete,以及 patch 局部更新(支持 replace/add/remove 等操作)。
  • 查询:支持简单 SQL 查询、参数化查询(推荐)、分页查询(maxItemCount 与 continuationToken)、跨分区查询(enableCrossPartitionQuery)。
  • 批量操作:executeBulkOperations 支持 Create、Upsert、Read、Replace、Delete、Patch 等操作类型,并可按返回状态码逐条判断成功与否。
  • 分区键:支持简单分区键与分层分区键(MultiHash,需 PartitionKeyDefinitionVersion.V2 与 PartitionKeyKind.MultiHash),分层分区键操作需传入分区键值数组。
  • 错误处理:通过 ErrorResponse 判断状态码,如 404(未找到)、409(冲突)、412(前置条件失败/ETag 不匹配)、429(限流,可读取 retryAfterInMs)。
  • 乐观并发:基于 ETag 的 IfMatch 访问条件,防止并发更新丢失。

使用方式要点

  • 类型导入:可从 @azure/cosmos 导入 CosmosClient、Database、Container、Item、Items、OperationInput、BulkOperationType、PatchOperation、SqlQuerySpec、SqlParameter、FeedOptions、PartitionKeyDefinition、PartitionKeyDefinitionVersion、PartitionKeyKind、ItemResponse、FeedResponse、ResourceResponse、ErrorResponse 等。
  • 服务层模式:可将 Container 封装进服务类(如 ProductService),提供 getById、create、findByCategory 等方法,并在 404 时返回 null。

最佳实践

  • 使用 AAD 认证,优先 DefaultAzureCredential 而非密钥。
  • 始终使用参数化查询,防止注入并提升查询计划缓存。
  • 尽量指定分区键,避免跨分区查询。
  • 多次写入时使用批量操作 executeBulkOperations。
  • 处理 429 错误,实现带指数退避的重试逻辑。
  • 使用 ETag 处理并发,避免并发场景下的更新丢失。
  • 关闭时调用 client.dispose() 释放客户端。

相关 SDK

  • @azure/cosmos:数据平面(本 SDK),npm install @azure/cosmos
  • @azure/arm-cosmosdb:管理平面(ARM),npm install @azure/arm-cosmosdb
  • @azure/identity:认证,npm install @azure/identity

适用场景

适用于在 JavaScript/TypeScript 应用中操作 Azure Cosmos DB NoSQL API 数据平面的任务,包括文档增删改查、参数化与分页查询、批量写入、分区键设计、ETag 并发控制与错误重试等。

限制

  • 仅当任务明确匹配上述范围时使用。
  • 输出不应替代针对具体环境的验证、测试或专家评审。
  • 若缺少必要输入、权限、安全边界或成功标准,应停止并请求澄清。
  • 本资料未提供收费、价格、平台支持范围或性能效果等信息。