你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

集合

Azure Cosmos DB 是一种全球分布式多模型数据库,支持文档、图形和键值数据模型。 本部分中的内容用于通过 REST 使用 SQL API 创建、查询和管理集合资源

REST API 支持对数据库帐户下的资源执行基本 CRUD 操作。 集合是一个容器,其中包含 JSON 文档和相关联的 JavaScript 应用程序逻辑,即存储的过程、触发器和用户定义函数。 本主题概述了用于管理文档集合的 REST 操作。

注意

这些 API 参考文章介绍如何使用 Azure Cosmos DB 数据平面 API 创建资源。 使用数据平面 API,可以配置基本选项,例如索引策略、分区键,就像使用 Cosmos DB SDK 一样。 如果需要对所有 Azure Cosmos DB 资源提供完整的功能支持,建议使用 Cosmos DB 资源提供程序

集合映射到 Azure Cosmos DB 中的容器。 因此,它是一个计费实体,其成本由以每秒请求单位表示的预配吞吐量决定。 集合可以跨一个或多个分区/服务器,并在吞吐量方面纵向扩展和缩减。 Azure Cosmos DB 自动将集合分区到一个或多个物理服务器。

集合是系统资源,因此具有固定的架构。 集合的 URI 路径由 资源模型中的 colls 表示。

以下示例演示集合的 JSON 定义:

{  
  "id": "testcoll",  
  "indexingPolicy": {  
    "indexingMode": "consistent",  
    "automatic": true,  
    "includedPaths": [  
      {  
        "path": "/*",  
        "indexes": [  
          {  
            "kind": "Range",  
            "dataType": "String",  
            "precision": -1  
          },  
          {  
            "kind": "Range",  
            "dataType": "Number",  
            "precision": -1  
          }  
        ]  
      }  
    ],  
    "excludedPaths": []  
  },  
  "partitionKey": {  
    "paths": [  
      "/AccountNumber"  
    ],  
    "kind": "Hash"  
  },  
  "_rid": "PD5DALigDgw=",  
  "_ts": 1459200611,  
  "_self": "dbs/PD5DAA==/colls/PD5DALigDgw=/",  
  "_etag": "\"00005900-0000-0000-0000-56f9a2630000\"",  
  "_docs": "docs/",  
  "_sprocs": "sprocs/",  
  "_triggers": "triggers/",  
  "_udfs": "udfs/",  
  "_conflicts": "conflicts/"  
}  
  
属性 说明
id 它是标识新集合的唯一名称。
indexingPolicy 它是集合的索引策略设置。
partitionKey 它是集合的分区配置设置。
_摆脱 它是系统生成的属性。 资源 ID (_rid) 是一个唯一标识符,也是根据资源模型上的资源堆栈分层的。 它可供内部用于放置和导航权限资源。
_ts 它是系统生成的属性。 它指定资源的上次更新时间戳。 高值是一个时间戳。
_自我 它是系统生成的属性。 它是资源的唯一可寻址 URI。
_Etag 它是系统生成的属性,表示乐观并发控制所需的资源 etag
_医生 它是系统生成的属性,用于指定文档资源的可寻址路径。
_sprocs 它是一个系统生成的属性,用于指定存储过程 (sprocs) 资源的可寻址路径。
_触发器 它是一个系统生成的属性,用于指定触发器资源的可寻址路径。
_Udf 它是系统生成的属性,用于指定用户定义函数 (udfs) 资源的可寻址路径。
_冲突 它是系统生成的属性,用于指定冲突资源的可寻址路径。 针对某个集合中的资源进行操作时,如果发生冲突,用户可以通过对冲突 URI 路径执行 GET 操作来检查发生冲突的资源。

索引策略下的属性

属性 说明
自动 指示自动索引是打开还是关闭。 默认值为 True,因此对所有文档编制索引。 将值设置为 False 将允许手动配置索引路径。
indexingMode 默认情况下,索引模式为 “一致”。 这意味着在插入、替换或删除文档期间同步进行索引编制。 若要让索引异步发生,可将索引模式设置为 lazy。
includedPaths 一个数组,包含要编制索引的文档路径。 默认情况下,包括两个路径:/path(指定对所有文档路径进行索引)和_ts路径(用于为时间戳范围比较编制索引)。
excludedPaths 一个数组,其中包含要从索引中排除的文档路径。

包含路径下的属性

属性 说明
路径 索引行为适用的路径。 索引路径以根 (/) 开头,常以 ? 结尾 通配符运算符表示前缀存在多个可能的值。 例如,对于 SELECT * FROM Families F WHERE F.familyName = "Andersen",必须在集合的索引策略中包含 /familyName/? 的索引路径。

索引路径还可以使用 * 通配符操作符以递归方式指定路径在前缀下的行为。 例如,/payload/* 可用于包含索引中有效负载属性下的所有内容。
dataType 它是对其应用索引行为的数据类型。 可以是 StringNumberPointPolygonLineString。 布尔值和 null 自动编制索引
kind 索引的类型。 哈希 索引可用于相等比较,而 范围 索引可用于相等、范围比较和排序。 空间 索引对于空间查询很有用。
精度 索引的精度。 对于最大精度,可以设置为 -1;对于 Number,可以设置为 1-8;对于 String,可以设置为 1-100。 不适用于 PointPolygonLineString 数据类型。

排除路径下的属性

属性 说明
路径 从索引中排除的路径。 索引路径以根 (/) 开头,通常以 * 通配符运算符结尾。 例如,/payload/* 可用于从索引中排除有效负载属性下的所有内容。

分区键下的属性

属性 说明
路径 一个路径数组,使用可对集合中的数据进行分区。 路径不得包含通配符或尾部斜杠。 例如,JSON 属性“AccountNumber”指定为“/AccountNumber”。 数组只能包含单个值。
kind 用于分区的算法。 仅支持 哈希

索引策略

将文档添加到集合时,Cosmos DB 默认自动为文档编制索引,从而允许查询文档。 你是在集合级别配置索引策略。 由于索引策略是在集合级别设置的,因此数据库中的每个集合都可以具有不同的索引策略。

集合的索引策略可以指定以下选项:

  • 自动:可以选择是否希望集合自动为所有文档编制索引。 默认情况下,为所有文档自动执行索引,但可以选择关闭该功能。 关闭索引功能后,只能通过本身的链接或通过使用 ID 进行查询的方法访问文档。

  • 索引模式:可以在同步 (一致) 、异步 (延迟) 索引更新和无索引 (无) 之间进行选择。 默认情况下,每次对集合中的文档执行插入、替换或删除操作时均将同步更新索引。 此更新使查询能够遵循与文档读取相同的一致性级别,而不会延迟索引追赶。

  • 索引类型和精度:用于索引条目的类型或方案直接影响索引存储和性能。 对于使用较高精度的方案,查询通常更快。 但是,对于索引也会有更高的存储开销。 选择较低精度意味着在执行查询期间可能需要处理更多文档,但存储开销将会减少。

  • 索引路径:在文档中,可以选择哪些路径必须包含或从索引中排除,这可以为事先知道查询模式的方案提供改进的写入性能并降低索引存储。

下表显示了某些示例索引编制路径,以及它们在查询中的使用方式。

属性 说明
/* 集合的默认路径。 递归并应用于整个文档树。
/prop/? 执行查询所需的索引路径(分别为哈希或范围类型)︰

SELECT * FROM collection c WHERE c.prop = "value"

SELECT * FROM collection c WHERE c.prop > 5

SELECT * FROM collection c ORDER BY c.prop
/prop/* 指定标签下所有路径的索引路径。 适用于以下查询:

SELECT * FROM collection c WHERE c.prop = "value"

SELECT * FROM collection c WHERE c.prop.subprop > 5

SELECT * FROM collection c WHERE c.prop.subprop.nextprop = "value"

SELECT * FROM collection c ORDER BY c.prop
/props/[]/? 针对标量数组(例如)提供迭代和 JOIN 查询所需的索引路径

[“a”, “b”, “c”]:

SELECT tag FROM tag IN collection.props WHERE tag = "value"

SELECT tag FROM collection c JOIN tag IN c.props WHERE tag > 5
/props/[]/subprop/? 针对对象数组(例如)提供迭代和 JOIN 查询所需的索引路径

[{subprop: “a”}, {subprop: “b”}]:

SELECT tag FROM tag IN collection.props WHERE tag.subprop = "value"

SELECT tag FROM collection c JOIN tag IN c.props WHERE tag.subprop = "value"
/prop/subprop/? 进行查询所需的索引路径 (分别为哈希或范围类型)︰

SELECT * FROM collection c WHERE c.prop.subprop = "value"

SELECT * FROM collection c WHERE c.prop.subprop > 5

SELECT * FROM collection c ORDER BY c.prop.subprop

有关 Cosmos DB 索引策略的详细信息,请参阅 Cosmos DB 索引策略。 就 REST API 文档来说,所有示例都使用自动索引。

产品/服务和性能级别

创建集合时,还会创建引用所创建集合的套餐资源。 产品/服务资源包含有关收集吞吐量的配置信息,以每秒请求单位数和每分钟请求单位为单位。

可以使用替换套餐更改集合的性能级别。

任务

可以使用文档集合执行以下操作: