【研发类-数据库开发Skills】azure-cosmos-ts 技能
Azure Cosmos DB JavaScript/TypeScript SDK(azure/cosmos),用于数据平面操作,包括文档CRUD、查询、批量操作和容器管理。技能概述azure-cosmos-ts 技能是Azure Cosmos DB NoSQL API的TypeScript/JavaScript客户端库,提供完整的数据平面操作支持。该SDK支持文档的CRUD操作、SQL查询、批量操作、存储过程调用等功能,适用于构建Node.js应用和前端应用。通过该技能,开发者可以利用TypeScript的类型安全特性,快速实现可靠的数据访问层。下载地址:antigravity-awesome-skills/skills/azure-cosmos-ts at main · sickn33/antigravity-awesome-skills · GitHub主要功能文档CRUD操作: 支持文档的创建、读取、更新、删除、Upsert和Patch操作SQL查询: 支持参数化查询、跨分区查询、分页和投影批量操作: 支持批量创建、更新、删除操作,提高吞吐量分区键管理: 支持单分区键和层级分区键(MultiHash)TypeScript类型: 提供完整的类型定义,确保类型安全AAD认证: 支持使用DefaultAzureCredential进行安全认证乐观并发: 支持使用ETag实现乐观并发控制存储过程: 支持调用和管理存储过程、触发器和UDF触发条件在以下情况下应该使用此技能:需要使用TypeScript/JavaScript开发Azure Cosmos DB应用需要实现文档的CRUD操作和查询功能需要使用批量操作提高吞吐量需要实现乐观并发控制需要使用存储过程和触发器需要构建类型安全的数据访问层使用场景Node.js API服务构建基于Express或NestJS的RESTful API,使用Cosmos DB作为数据存储,实现高性能的数据访问。前端应用在浏览器或React Native应用中直接访问Cosmos DB,实现无服务器的数据访问架构。Azure Functions在Azure Functions中访问Cosmos DB,构建无服务器的事件驱动应用。处理过程1. 客户端初始化创建Cosmos客户端并配置认证:import { CosmosClient } from azure/cosmos;import { DefaultAzureCredential } from azure/identity;const client new CosmosClient({endpoint: process.env.COSMOS_ENDPOINT!,aadCredentials: new DefaultAzureCredential(),});2. 数据库和容器设置创建或获取数据库和容器:const { database } await client.databases.createIfNotExists({id: my-database,});const { container } await database.containers.createIfNotExists({id: my-container,partitionKey: { paths: [/partitionKey] },});3. 文档CRUD操作执行文档的创建、读取、更新和删除:interface Product {id: string;partitionKey: string;name: string;price: number;}// 创建const { resource } await container.items.createProduct(item);// 读取const { resource } await container.item(product-1, electronics).readProduct();// 更新const { resource: updated } await container.item(product-1, electronics).replaceProduct(existing);// Upsertconst { resource } await container.items.upsertProduct(item);// 删除await container.item(product-1, electronics).delete();4. Patch操作执行部分更新:import { PatchOperation } from azure/cosmos;const operations: PatchOperation[] [{ op: replace, path: /price, value: 799.99 },{ op: add, path: /discount, value: true },{ op: remove, path: /oldField },];const { resource } await container.item(product-1, electronics).patchProduct(operations);输入要求使用此技能时,需要提供:Cosmos DB账户端点URL认证凭据(AAD或密钥)数据库名称和容器名称分区键路径TypeScript接口定义输出说明技能将提供:完整的客户端初始化代码TypeScript接口定义示例CRUD操作实现代码查询执行和分页代码批量操作示例错误处理和并发控制使用示例示例1: 参数化查询import { SqlQuerySpec } from azure/cosmos;const querySpec: SqlQuerySpec {query: SELECT * FROM c WHERE c.partitionKey category AND c.price maxPrice,parameters: [{ name: category, value: electronics },{ name: maxPrice, value: 1000 },],};const { resources } await container.items.queryProduct(querySpec).fetchAll();示例2: 批量操作import { BulkOperationType, OperationInput } from azure/cosmos;const operations: OperationInput[] [{operationType: BulkOperationType.Create,resourceBody: { id: 1, partitionKey: cat-a, name: Item 1 },},{operationType: BulkOperationType.Upsert,resourceBody: { id: 2, partitionKey: cat-a, name: Item 2 },},{operationType: BulkOperationType.Delete,id: 3,partitionKey: cat-b,},];const response await container.items.executeBulkOperations(operations);示例3: 乐观并发控制// 读取时获取ETagconst { resource, etag } await container.item(product-1, electronics).readProduct();if (resource etag) {resource.price 899.99;try {// 仅当ETag匹配时替换await container.item(product-1, electronics).replace(resource, {accessCondition: {type: IfMatch,condition: etag,},});} catch (error) {if (error instanceof ErrorResponse error.code 412) {console.log(Document was modified by another process);}}}最佳实践使用AAD认证: 优先使用DefaultAzureCredential而不是密钥始终使用参数化查询: 防止注入攻击并提高计划缓存效率指定分区键: 尽可能避免跨分区查询使用批量操作: 对于多次写入,使用executeBulkOperations处理429错误: 实现指数退避的重试逻辑使用ETag实现并发: 防止并发场景中的丢失更新关闭客户端: 在清理时调用client.dispose()资源层次结构CosmosClient└── Database└── Container├── Items (documents)├── Scripts (stored procedures, triggers, UDFs)└── Conflicts分区键管理层级分区键(MultiHash)支持最多3层分区键,实现更精细的数据分布:import { PartitionKeyDefinitionVersion, PartitionKeyKind } from azure/cosmos;const { container } await database.containers.createIfNotExists({id: orders,partitionKey: {paths: [/tenantId, /userId, /sessionId],version: PartitionKeyDefinitionVersion.V2,kind: PartitionKeyKind.MultiHash,},});// 操作需要分区键值数组const { resource } await container.item(order-1, [tenant-a, user-123, session-xyz]).read();错误处理import { ErrorResponse } from azure/cosmos;try {const { resource } await container.item(missing, pk).read();} catch (error) {if (error instanceof ErrorResponse) {switch (error.code) {case 404:console.log(Document not found);break;case 409:console.log(Conflict - document already exists);break;case 412:console.log(Precondition failed (ETag mismatch));break;case 429:console.log(Rate limited - retry after:, error.retryAfterInMs);break;default:console.error(Cosmos error ${error.code}: ${error.message});}}throw error;}服务层模式export class ProductService {private container: Container;constructor(client: CosmosClient) {this.container client.database(process.env.COSMOS_DATABASE!).container(process.env.COSMOS_CONTAINER!);}async getById(id: string, category: string): PromiseProduct | null {try {const { resource } await this.container.item(id, category).readProduct();return resource ?? null;} catch (error) {if (error instanceof ErrorResponse error.code 404) {return null;}throw error;}}async create(product: OmitProduct, id): PromiseProduct {const item { ...product, id: crypto.randomUUID() };const { resource } await this.container.items.createProduct(item);return resource!;}}安装和配置# 安装依赖npm install azure/cosmos azure/identity# 环境变量COSMOS_ENDPOINThttps://account.documents.azure.com:443/COSMOS_DATABASEdatabase-nameCOSMOS_CONTAINERcontainer-nameTypeScript类型参考import {// 客户端和资源CosmosClient,Database,Container,Item,Items,// 操作OperationInput,BulkOperationType,PatchOperation,// 查询SqlQuerySpec,SqlParameter,FeedOptions,// 分区键PartitionKeyDefinition,PartitionKeyDefinitionVersion,PartitionKeyKind,// 响应ItemResponse,FeedResponse,ResourceResponse,// 错误ErrorResponse,} from azure/cosmos;相关SDKSDK用途安装azure/cosmos数据平面(此SDK)npm install azure/cosmosazure/arm-cosmosdb管理平面(ARM)npm install azure/arm-cosmosdbazure/identity认证npm install azure/identity

相关新闻

CNN、ViT、TVA三种具身智能视觉范式的巅峰对决(6)

CNN、ViT、TVA三种具身智能视觉范式的巅峰对决(6)

前沿技术介绍:AI智能体视觉(TVA,Transformer-based Vision Agent)是依托Transformer架构与“因式智能体”理论所构建的颠覆性工业视觉技术,是集深度强化学习(DRL)、卷积神经网络(CNN…

2026/10/12 16:46:08 阅读更多 →
Python爬虫进阶:使用curl_cffi模拟Chrome TLS指纹绕过反爬检测

Python爬虫进阶:使用curl_cffi模拟Chrome TLS指纹绕过反爬检测

1. 项目概述:当爬虫遇上TLS指纹检测 最近在折腾一个数据采集项目时,遇到了一个相当棘手的问题:目标网站明明没有复杂的验证码,也没有动态加载的JavaScript,但我的Python爬虫脚本就是连首页都打不开。用 requests 库…

2026/10/12 17:35:46 阅读更多 →
YOLOv5s/yolov7/yolov8+pyqt flask车流量检测21(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_

YOLOv5s/yolov7/yolov8+pyqt flask车流量检测21(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_

YOLOv5s/yolov7/yolov8pyqt flask车流量检测21(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_ 统计系统 车辆检测:实时检测不同类型的车辆,包括:汽车,卡车,公共汽车,摩托车。2车流量统计:对四种类…

2026/10/12 11:53:14 阅读更多 →

最新新闻

卡尔曼滤波器从一维到EKF:机器人状态估计实战笔记

卡尔曼滤波器从一维到EKF:机器人状态估计实战笔记

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 18:56:01 阅读更多 →
POD-LSTM高维时间序列预测实战:降维+建模+可视化一站式指南

POD-LSTM高维时间序列预测实战:降维+建模+可视化一站式指南

简介:本资源是一份面向数据科学与工业智能领域工程师的POD-LSTM时间序列预测实战指南,聚焦高维多变量场景下的降维建模与可解释预测难题,适用于风电功率、设备状态监测、环境治理等实际业务场景。资源以1个146KB的docx文档形式交付&#xff0…

2026/10/13 18:56:01 阅读更多 →
LiteLLM:大模型多平台协议桥接与标准化调用实战指南

LiteLLM:大模型多平台协议桥接与标准化调用实战指南

1. 一个被严重低估的“协议翻译官”:LiteLLM到底在解决什么真问题?很多人第一次看到LiteLLM这个名字,下意识会以为它是又一个大模型训练框架、推理加速库,或者某种新型开源大模型。我最初也这么想——直到在某次跨平台AI服务集成中…

2026/10/13 18:56:01 阅读更多 →
华为AI DevSpace编译星闪WS63 SDK全攻略

华为AI DevSpace编译星闪WS63 SDK全攻略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 18:56:01 阅读更多 →
Django+Vue小说推荐系统:从爬虫到可视化完整实现

Django+Vue小说推荐系统:从爬虫到可视化完整实现

看到标题里同时出现了“DjangoVue.js”“小说推荐系统”“小说可视化”“小说爬虫”“大数据毕业设计”这一串关键词,我基本能猜到你在选毕设题目时经历了什么——翻了一下午题目清单,要么是太简单拿不出手,要么是纯理论写到头秃,…

2026/10/13 18:56:01 阅读更多 →
静态时序分析实战:从时序弧到时钟约束的完整解读

静态时序分析实战:从时序弧到时钟约束的完整解读

说实话,静态时序分析这个系列写到第二篇,我想换个切入点。上一篇我们把STA是什么、为什么需要它、建立时间和保持时间的基本定义聊了一遍。但很多刚接触时序分析的同学,看完概念之后对着工具报出来的一屏时序报告,还是会有一种&qu…

2026/10/13 18:54:57 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →